我在这里尝试将 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 'GetHeader' could not be found in the container 'DbEntities'.
如果我正确导入该函数,我会遇到此错误:
System.InvalidOperationException:ExecuteFunction 中的类型参数“BusinessEntites.GetHeaderResult”与函数返回的类型“DbModel.GetHeaderResult”不兼容。
我想这只是这里缺少的一个简单设置,但我似乎无法捕获它。
请注意 EDMX 文件具有正确的设置(CodeGenerationStrategy 设置为无,CustomTool 为空)
最佳答案
在第一种情况下,您在上下文中调用了错误的方法。 ExecuteFunction
仅用于函数导入。请改用 ExecuteStoreQuery
和 SqlParameter
。在第二种情况下,函数导入还会在您的 EDMX 中创建一个复杂类型,并且 EF 预计您将使用该复杂类型作为函数导入调用的结果。
关于c# - 如何将 Entity Framework 与存储过程和 POCO 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8332565/