簡體   English   中英

從EntityFramework執行存儲過程-代碼優先

[英]Executing a Stored Procedure from EntityFramework - Code First

我有一個SQL存儲過程(SP) uspGetLocationsforUser ,我正在從我的MVC項目中嘗試。

我首先通過將以下代碼添加到Context Class(DAL)將其映射到EntityFramework:

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(); 
}

能否請你幫忙?

提前致謝。

更新資料

這是錯誤消息:

“在容器'DAL'中找不到FunctionImport'uspGetLocationsforUser'。”

解決方案是我必須添加存儲過程所屬的SQL模式名稱。

然后執行以下操作:

var userName = GetUserWindowsLoginName();

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM