2009-06-12 84 views
2

在过去几天我一直在使用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支持实施的问题。

希望有人能给我一些进一步的线索。

回答

1

对于函数导入,这是一个InOut参数和代码gen的已知问题。

我们一直在谈论如何让InOut参数产生这样的代码:

public ObjectResults<dinner> get_dinner(ref int dinner_id); 

而不是你拥有什么。

有一点要尝试从“InOut”转换为“In”参数。然后代码生成应该产生这样的:

public ObjectResults<dinner> get_dinner(int dinner_id); 

真正的问题但如果你把它的工作?

希望这有助于背景

干杯

亚历

+0

感谢您的回答。我会尝试修改edmx文件并查看它是否有效。当前生成的函数导入工作时,它只是令我烦恼的参数类型。 – Gio2k 2009-06-13 08:53:04