2014-01-08 35 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(); 
} 

你能幫忙嗎?

在此先感謝。

更新

這是錯誤消息:

「的FunctionImport 'uspGetLocationsforUser' 無法在容器 'DAL' 被發現。」

+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中的模式名服務器! –