使用复杂数据类型在EF中调用存储过程

5

我是一个初学者,正在使用Entity Framework在一个示例ASP.NET/MVC 3.0 VS2010项目中工作。我已经将两个存储过程导入为Function Imports,并因此为每个创建了一个复杂数据类型。

我正在尝试运行以下C#代码:

public ComplexDataType RunStoredProc()
{
    var context = new DbEntities();
    int param1 = 370;
    int param2 = -1;
    string param3 = "Current";

    ComplexDataType result = new ComplexDataType;
    result = context.StoredProc(param1, param2, param3);
    return result;
}

我遇到了错误:

Cannot implicitly convert data type 
    System.Data.Objects.ObjectResult(ComplexDataType) to 'ComplexDataType'

我做错了什么?如何正确地将存储过程的结果存储在复杂数据类型中?


展示你的映射和存储过程方法。 - Pawel
2个回答

2
您可以使用DbSet.SqlQuery方法从存储过程中获取结果。
int param1=12;
int param2=53;
var results=context.ComplexDataTypes.SqlQuery.
                       ("dbo.YourSPNameHere @p0 @p1", param1,param2).Single();

假设你的DbContext类中定义了这样一个集合。
public DbSet<ComplexDataType> ComplexDataTypes { set;get;}

更多信息可以在这里找到。


该项目无法识别context.Database.SqlQuery,但它给出了context.ExecuteStoreQuery的选项;按照您上面的语法使用相同的命令,它会给我相同的错误--无法隐式转换。还有其他的想法吗? - Nick L.
你正在使用哪个版本的Entity Framework?你的存储过程是否返回了任何结果? - Shyju
使用 EF 4.0;存储过程返回约10列,通常在5到15行之间。 - Nick L.
好的,让我明确一下——存储过程以SELECT语句结束,输出数据,尽管查询本身不包含显式的“return”子句。虽然如果这是一个问题,我认为这与复杂数据类型无关。当在VS2010中设置复杂数据类型时,它确实识别了所有预期的列,并且我可以从OP中的实例化的复杂数据类型结果集(“result”)中调用它们;只是不能向其中写入任何内容。 - Nick L.

1
尝试更改这个:
result = context.StoredProc(param1, param2, param3);

转换为:

result = (ComplexDataType) context.StoredProc(param1, param2, param3);

这里出现了相同的错误;它不允许我将其转换为复杂数据类型。仍然显示与上面相同的错误。还有其他想法吗? - Nick L.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接