最近几天我一直在玩EF。我们的应用程序基于 SQL Anywhere 10 数据库,我们所有的数据访问都是通过存储过程完成的。由于 SA 10 不支持 EF,我正在使用 SA 11 测试 EF。为此,我创建了一个包含 2 个表和几个存储过程的小型数据库(基于 asp.net mvc 示例中的 nerddinner 数据库,请参阅这里)我已经从数据库、表和存储过程创建了一个模型,并进行了必要的函数导入。我有一个具有以下签名的存储过程:
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 支持实现的问题。
希望有人能给我一些进一步的线索。