【问题标题】:How can I call a MYSQL SP from EF4如何从 EF4 调用 MYSQL SP
【发布时间】:2011-07-03 05:48:36
【问题描述】:

我尝试在edmx文件中添加SP,但是输入参数没有显示出来。我尝试使用下面的代码,但它出错了。

IEnumerable<Finance> userFinance =
((IObjectContextAdapter)this)
.ObjectContext.ExecuteStoreQuery<Finance>("GetFinanceContent @userId", parameter);

我也试过了:

SqlParameter parameter = new SqlParameter
    {
        DbType= DbType.Int32,
        Direction = ParameterDirection.Input,
        Value= 100,
        ParameterName ="userId"
    };
var results= db.Database.ExecuteSqlCommand ("GetFinanceContent @userId", parameter);

这会导致一些参数错误。 只能存储 MySqlParameter 对象

【问题讨论】:

  • 您是否为此完成了函数导入步骤?

标签: c# mysql entity-framework


【解决方案1】:

在 EF4 中使用存储过程非常容易。这里不需要在edmx文件中添加Sp你可以直接访问它只需要使用函数映射只需遵循这些规则......

  1. 更新您的模型并在其中添加存储过程。

  2. 现在在模型浏览器视图中转到存储过程文件夹,您将在其中看到您添加的 SP。

  3. 现在选择 SP 并通过右键单击选择“创建函数导入”选项。

  4. 现在函数导入窗口将在返回类型部分中打开,根据您的 SP 返回的数据选择返回类型..

    --> 如果您的 SP 返回的实体完全匹配,请选择该实体。如果是标量值,则选择其返回类型,如果不是,则您需要创建一个与您的 SP 结果完全匹配的实体。

  5. 之后你就可以像这样访问SP了。

    using(EFEntity ef = new EFEntity ())
     {
        var results = from result in ef.YourSpName(Param1, param2,..)
                  select result
     }
    

希望这会对你有所帮助..

更新的答案: 正如您所说,您没有获取参数,这意味着您的 SSDL 中没有定义参数,因此您必须手动执行此操作。

Here 是您问题的解决方案。

祝你好运

【讨论】:

  • 我已经尝试过这种方法,由于我使用的是 MYSQL Db,因此将 SP 拉到模型时似乎没有显示参数
  • @Natasha :按照这些步骤检查您的 CSDL 是否已在其中定义了您的 SP 参数,如果不是您必须手动添加它。
  • 您提供的链接指向与我告诉您的相同的问题。您必须在 CSDL 中手动添加参数,因为它没有得到它。而不仅仅是您在 edmx 中手动进行的每一次更改当模型更新时会被清除,这是一种常见的行为。
  • 这个错误还说 6.3.7 有固定版本,但显然不是这样,因为我刚刚安装了它,仍然有同样的问题
  • @Natasha:问题仍然存在,目前的解决方案是手动添加参数。在 CSDL 和 SSDL 两个部分的 emdx 文件中搜索你的 sp 并在那里手动添加你的参数。如果你阅读了链接并按照它进行操作,你的问题应该得到解决
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 2016-12-10
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多