在过去几天我一直在使用EF。 我们的应用程序基于SQL Anywhere 10数据库,我们所有的数据访问均通过存储过程完成。由于EF不受SA 10支持,因此我使用SA 11测试EF。 为此,我创建了一个包含2个表和几个存储过程的小型数据库(基于asp.net mvc示例中的nerddinner数据库,请参阅here) 我已经从数据库,表和存储过程创建了一个模型,并执行了必要的函数导入。 我有以下签名的存储过程:实体框架+ Sql Anywhere 11 +存储过程
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支持实施的问题。
希望有人能给我一些进一步的线索。
感谢您的回答。我会尝试修改edmx文件并查看它是否有效。当前生成的函数导入工作时,它只是令我烦恼的参数类型。 – Gio2k 2009-06-13 08:53:04