2014-01-08 6 views
0

У меня есть хранимая процедура SQL (SP) uspGetLocationsforUser, которую я пытаюсь выполнить из моего проекта MVC.Выполнение хранимой процедуры из EntityFramework - сначала код

я сначала отображается его в EntityFramework путем добавления этого кода в контекст класса (DAL):

public virtual ObjectResult<uspGetLocationsforUser_Result> uspGetLocationsforUser(string userName) 
{ 
    var userNameParameter = userName != null ? 
     new ObjectParameter("UserName", userName) : 
     new ObjectParameter("UserName", typeof(string)); 

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<uspGetLocationsforUser_Result>("uspGetLocationsforUser", userNameParameter); 
} 

Этот класс был добавлен к модели, чтобы представлять возвращенный результат SP:

public class uspGetLocationsforUser_Result 
{ 
    public int LocationID { get; set; } 
    public string LocationName { get; set; } 
} 

Я хотел бы назвать это из кода, и по каким-то причинам это не получилось:

Я пытаюсь сделать это:

using (var data = new DAL()) 
{ 
List<uspGetLocationsforUser_Result> results = data.uspGetLocationsforUser(userName).ToList(); 
} 

Не могли бы вы помочь?

Заранее спасибо.

Update

Это сообщение об ошибке:

"The FunctionImport 'uspGetLocationsforUser' не может быть найден в контейнере« Даль".

+0

Что именно проблема? – RePierre

+0

Есть ли какие-то ошибки? (также создайте конструктор в классе uspGetLocationsforUser_Result. – Schuere

+0

@RePierre Я обновил вопрос, чтобы добавить сообщение об ошибке. –

ответ

0

Решение для этого состояло в том, что мне пришлось добавить имя схемы SQL, под которым принадлежит хранимая процедура.

, а затем сделать это:

var userName = GetUserWindowsLoginName(); 

SqlParameter logonName = new SqlParameter("@userName", userName); 

List<uspGetLocationsforUser_Result> results = data.Database.SqlQuery<uspGetLocationsforUser_Result>("admin.uspGetLocationsforUser @userName", logonName).ToList(); 
+0

admin - это имя схемы в SQL Сервер! –

Смежные вопросы