c# - 如何将 Entity Framework 与存储过程和 POCO 一起使用

标签 c# entity-framework stored-procedures poco

我在这里尝试将 Entity Framework 与存储过程和 POCOS 以及 2 个不同的项目结合使用。

我有一个项目 DataAccess(用于我的 edmx 和 DataContexts)和一个项目 BusinessEntities(用于我的 POCO)。
DataAccess 引用了 BusinessEntities。

在我的数据库中,我有一个非常标准的 SP:

CREATE STORED PROCEDURE GetHeader
    @id CHAR(35)
AS
BEGIN
    SELECT ID, Name FROM mytable WHERE ID = @id
END

数据上下文是:

public class DbContext : ObjectContext
{
public ObjectResult<BusinessEntities.GetHeaderResult> GetHeader(string id)
{
return base.ExecuteFunction<BusinessEntities.GetHeaderResult>("GetHeader", new ObjectParameter("id", id));
}
}

如果我只这样做(EDMX 已使用 SP 更新但函数尚未导入),我会遇到此错误:

System.InvalidOperationException: The FunctionImport &#39;GetHeader&#39; could not be found in the container &#39;DbEntities&#39;.

如果我正确导入该函数,我会遇到此错误:

System.InvalidOperationException:ExecuteFunction 中的类型参数“BusinessEntites.GetHeaderResult”与函数返回的类型“DbModel.GetHeaderResult”不兼容。

我想这只是这里缺少的一个简单设置,但我似乎无法捕获它。

请注意 EDMX 文件具有正确的设置(CodeGenerationStrategy 设置为无,CustomTool 为空)

最佳答案

在第一种情况下,您在上下文中调用了错误的方法。 ExecuteFunction 仅用于函数导入。请改用 ExecuteStoreQuerySqlParameter。在第二种情况下,函数导入还会在您的 EDMX 中创建一个复杂类型,并且 EF 预计您将使用该复杂类型作为函数导入调用的结果。

关于c# - 如何将 Entity Framework 与存储过程和 POCO 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8332565/

相关文章:

c# - 改变方法,使他们的搜索变得不区分大小写

c# - EF Core 慢速批量插入(约 80k 行)

entity-framework - Ninject WebAPI 操作无法完成,因为 DbContext 已被释放

C# 从加载的 Dll 调用主 exe 中静态类的 GetType

c# - 2 个 XAML 文件之间的数据绑定(bind)

c# - 使用.NET将多个ogg vorbis文件顺序连接到一个文件中?

linq - 根据用户输入构建动态 linq 查询

mysql - 在 MySQL 存储过程中使用 "if"和 "else"

MySQL - 存储过程

asp.net - 使用 MySql 中的存储过程更新 2 个表