在过去的几天里,我一直在和EF一起玩。我们的应用程序基于SQL Anywhere 10数据库,所有数据访问都是通过存储过程完成的。由于SA 10不支持EF,因此我正在使用SA 11测试EF。为此,我创建了一个包含2个表和几个存储过程的小型数据库(基于asp.net mvc示例中的nerddinner数据库,请参阅here )。我已经从数据库、表和存储过程创建了一个模型,并进行了必要的函数导入。我有一个具有以下签名的存储过程:
ALTER PROCEDURE "DBA"."get_dinner"( @dinner_id integer)
BEGIN
select dinner_id, title, event_date, description, hosted_by , contact_phone, address, country, latitude, longitude
from dba.dinners d
where d.dinner_id = @dinner_id
END生成的函数导入代码如下所示:
public global::System.Data.Objects.ObjectResult<dinner> get_dinner(global::System.Data.Objects.ObjectParameter dinner_id)
{
return base.ExecuteFunction<dinner>("get_dinner", dinner_id);
}这就是问题所在。理想情况下,生成的代码应该接受一个int参数,而不是global::System.Data.Objects.ObjectParameter dinner_id。据我所知,edmx文件包含了正确解释参数类型所需的所有数据:
<Function Name="get_dinner" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="DBA">
<Parameter Name="dinner_id" Type="int" Mode="InOut" />
</Function>我是不是漏掉了什么?为了让函数导入具有正确的参数类型,还需要什么?这是您可以通过调整edmx文件来纠正的问题,还是SA11 EF支持实现的问题。
希望有人能给我一些进一步的线索。
发布于 2009-06-13 05:45:31
这是一个用于函数导入的InOut参数和代码生成的已知问题。
我们一直在讨论让InOut参数生成这样的代码:
public ObjectResults<dinner> get_dinner(ref int dinner_id);而不是你所拥有的。
可以尝试的一件事是将'InOut‘参数转换为'In’参数。然后,代码生成应该生成如下所示的内容:
public ObjectResults<dinner> get_dinner(int dinner_id);但真正的问题是,如果你调用它,它会工作吗?
希望这个背景对你有所帮助。
干杯
亚历克斯
https://stackoverflow.com/questions/989203
复制相似问题