首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Entity Framework + Sql Anywhere 11 +存储过程

问Entity Framework + Sql Anywhere 11 +存储过程
EN

Stack Overflow用户
提问于 2009-06-12 21:43:02
回答 1查看 834关注 0票数 2

在过去的几天里,我一直在和EF一起玩。我们的应用程序基于SQL Anywhere 10数据库,所有数据访问都是通过存储过程完成的。由于SA 10不支持EF,因此我正在使用SA 11测试EF。为此,我创建了一个包含2个表和几个存储过程的小型数据库(基于asp.net mvc示例中的nerddinner数据库,请参阅here )。我已经从数据库、表和存储过程创建了一个模型,并进行了必要的函数导入。我有一个具有以下签名的存储过程:

代码语言:javascript
复制
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

生成的函数导入代码如下所示:

代码语言:javascript
复制
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文件包含了正确解释参数类型所需的所有数据:

代码语言:javascript
复制
<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支持实现的问题。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-06-13 05:45:31

这是一个用于函数导入的InOut参数和代码生成的已知问题。

我们一直在讨论让InOut参数生成这样的代码:

代码语言:javascript
复制
public ObjectResults<dinner> get_dinner(ref int dinner_id);

而不是你所拥有的。

可以尝试的一件事是将'InOut‘参数转换为'In’参数。然后,代码生成应该生成如下所示的内容:

代码语言:javascript
复制
public ObjectResults<dinner> get_dinner(int dinner_id);

但真正的问题是,如果你调用它,它会工作吗?

希望这个背景对你有所帮助。

干杯

亚历克斯

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/989203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档