首页 文章

实体框架Sql Anywhere 11存储过程

提问于
浏览
2

我在过去几天一直在玩EF . 我们的应用程序基于SQL Anywhere 10数据库,我们所有的数据访问都是通过存储过程完成的 . 由于SA不支持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支持实现的问题 .

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

1 回答

  • 1

    这是InOut参数和函数导入的代码gen的已知问题 .

    我们一直在讨论使InOut参数产生如下代码:

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

    而不是你拥有的 .

    要尝试的一件事是从'InOut'转换为'In'参数 . Code gen应该产生这样的东西:

    public ObjectResults<dinner> get_dinner(int dinner_id);
    

    真正的问题是,如果你打电话,它是否有效?

    希望这背景有所帮助

    干杯

    亚历克斯

相关问题