簡體   English   中英

實體框架 6 和具有架構名稱的存儲過程

[英]Entity Framework 6 and Stored Procedures with Schema names

所以我從我的數據庫中導入了一個不在 dbo(默認)模式中的存儲過程到我的實體模型。

存儲過程的名稱不是 dbo.MyProc; 而是:person.MyProc(注意模式名稱是“person”,而不是“dbo”)

出於某種原因,當我嘗試執行存儲過程時,我收到一個錯誤,好像 EntityFramework 對 MyProc 是個人模式一無所知。 這是我嘗試在我的代碼中執行存儲過程的方法:

using (var dbContext = new DataModel.PersonEntity())
{
    dbContext.dbOp_DeletePerson(personId);
}

這是我得到的錯誤:

EntityCommand.CommandText 的值對於 StoredProcedure 命令無效。 EntityCommand.CommandText 值必須采用“ContainerName.FunctionImportName”形式

稍微追溯一下,這是 Entity Framework 自動生成的代碼行:

return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("dbOp_DeletePerson", PersonId);

重申一下,dbOp_DeletePerson 處於“person”模式而不是 dbo。

在此先感謝您的幫助!

我想這是解決辦法(我不喜歡它,但是很好) http://www.dotnetbits.com/entity-framework-6-t4-templates/

  1. 在你的 Model.Context.tt 中尋找“edmFunction.Name”

  2. 用“edmFunction.FullName”替換它

    11

抱歉無法評論,所以..

現在有更好的解決方案嗎? 我的意思是修復永久性的東西? 因為修改后您需要重新創建edmx文件,因此每次都要進行此修正。 更好的東西 ?

我遇到了這個問題並通過更改重復存儲過程之一的函數導入名稱(和函數導入結果名稱(如果過程返回數據))來修復它。

暫無
暫無

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

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