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

Eri*_*ick 1 c# stored-procedures entity-framework poco

我在这里尝试使用实体框架与存储过程和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
Run Code Online (Sandbox Code Playgroud)

datacontext是:

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

如果我只是这样(EDMX已经用SP更新但功能尚未导入)我有这个错误:

System.InvalidOperationException: The FunctionImport &#39;GetHeader&#39; could not be found in the container &#39;DbEntities&#39;.
Run Code Online (Sandbox Code Playgroud)

如果我正确导入函数我有这个错误:

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

我想这只是一个简单的设置,但是我似乎无法抓住它.

请注意,EDMX文件的设置不正确(CodeGenerationStrategy设置为none,CustomTool为空)

Lad*_*nka 6

在第一种情况下,您在上下文中调用错误的方法.ExecuteFunction仅适用于功能导入.使用ExecuteStoreQuerySqlParameter替代.在第二种情况下,函数导入还会在EDMX中创建复杂类型,EF期望您将使用该复杂类型作为函数导入调用的结果.