【问题标题】:Read a non typed result of a stored procedure with Entity Framework使用实体框架读取存储过程的非类型化结果
【发布时间】:2016-07-06 21:58:30
【问题描述】:

我正在使用实体框架来调用存储过程。

当我调用从表中返回结果集的存储过程时,它可以工作:

var user= context.Database.SqlQuery<User>("get_My_User, @Name, @Mail",
            new SqlParameter("@Name", 'Maurice'),
            new SqlParameter("@Mail", 'maurice.abruti@yahoo.com')
            ).FirstOrDefault();

不幸的是,当我使用不是表的结果集调用存储过程时,我无法得到任何结果。

此尝试总是返回 -1:

var result = context.Database.ExecuteSqlCommand("my_stored_procedure @Param1, @Param2",
 new SqlParameter("@Param1", "value1"),
 new SqlParameter("@Param2", "value2"));

另一个尝试返回一个空对象列表:

 var generatedDesignations = context.Database.SqlQuery<Object>(
        "my_stored_procedure @Param1, @Param2",
    new SqlParameter("@Param1", "value1"),
    new SqlParameter("@Param2", "value2")).ToList();

你知道怎么做吗?

【问题讨论】:

  • 当您说“来自多个表的结果”时,您是指返回多个数据集的存储过程吗?
  • 不,我只是从不同的表中取列
  • 为什么要为此使用实体框架?似乎是 Dapper 的完美用例。
  • @DavidL 因为在我的项目中,存储过程在部分时间返回表的内容
  • 我读过this answer 来回答一个类似的问题(我自己没有测试过)。它可能会变得有些复杂,在您的位置上,我会问自己这些好处是否值得复杂化,而不仅仅是重构以使用适当的类型。很可能是你的情况,但我会看看一旦我得到数据后我将如何处理数据。

标签: c# sql-server entity-framework stored-procedures


【解决方案1】:

我不知道使用 SqlQuery 和 ExecuteSqlComman 方法。但我可以推荐另一种方法。 如果你在VS的服务器资源管理器中定义存储过程,它的使用就更简单了。你可以把它当成一个方法来使用。为了定义它;
1) 打开服务器资源管理器,
2)查找数据连接的存储过程。
3) 右键添加写入存储过程。
4) 更新它。
5) 更新 EDMX
6) 使用存储过程 context.StoredProcedureName(paramters)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    相关资源
    最近更新 更多