【问题标题】:Entity Framework 6 and Stored Procedures with Schema names实体框架 6 和具有模式名称的存储过程
【发布时间】:2014-10-17 23:46:48
【问题描述】:

因此,我将一个不在 dbo(默认)架构中的数据库中的存储过程导入到我的实体模型中。

存储过程的名称不是 dbo.MyProc;而是:person.MyProc(注意架构名称是“person”,而不是“dbo”)

由于某种原因,当我尝试执行存储过程时,我收到一个错误,好像 EntityFramework 对 MyProc 是个人模式一无所知。以下是我尝试在代码中执行存储过程的方法:

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

这是我得到的错误:

EntityCommand.CommandText 的值对 a 无效 存储过程命令。 EntityCommand.CommandText 值必须是 形式为“ContainerName.FunctionImportName”

稍微追溯一下,这是 Entity Framework 自动生成的代码行:

返回 ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("dbOp_DeletePerson", 个人身份);

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

提前感谢您的帮助!

【问题讨论】:

    标签: c# sql-server entity-framework stored-procedures


    【解决方案1】:

    我想这是解决方法(我不喜欢它,但是哦,好吧) http://www.dotnetbits.com/entity-framework-6-t4-templates/

    1. 在您的 Model.Context.tt 中查找“edmFunction.Name”

    2. 将其替换为“edmFunction.FullName”

    【讨论】:

    • 是的,请告诉我。不幸的是,我一无所知;我们现在正在使用 EF6;如果您确实找到了更好的选择,请及时更新我
    【解决方案2】:

    我遇到了这个问题,并通过更改其中一个重复存储过程的函数导入名称(和函数导入结果名称(如果过程返回数据))来修复它。

    【讨论】:

      猜你喜欢
      • 2016-10-03
      • 1970-01-01
      • 2011-09-19
      • 2016-09-02
      • 1970-01-01
      • 2012-09-02
      • 2010-12-11
      • 1970-01-01
      相关资源
      最近更新 更多