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

时间:2011-11-30 20:31:50

标签: 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

datacontext是:

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:类型参数&#39; BusinessEntites.GetHeaderResult&#39;在ExecuteFunction中与类型&#39; DbModel.GetHeaderResult&#39;不兼容。由函数返回。

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

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

1 个答案:

答案 0 :(得分:6)

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