【问题标题】:How to Create Custom Stored Procedures Using Code First Fluent API如何使用 Code First Fluent API 创建自定义存储过程
【发布时间】:2015-10-15 17:47:01
【问题描述】:

有很多文章展示了如何使用 Code First 创建插入、更新、删除过程,例如 one

像这个简单的选择语句这样的自定义过程怎么样:

Select * from Customers

我可以更改 Up 和 Down Migration 方法,但是有没有一种方法可以直接使用 Fluent API 创建自定义过程。

【问题讨论】:

  • 使用dbcontext.Database.SqlQuery<Customer>("SELECT * FROM Customers");
  • 谢谢贾拉尔。这是为了对数据库运行查询,但是如何创建一个包含该语句的存储过程?
  • 使用dbcontext.Database.ExecuteSqlCommand("CREATE PROCEDURE ... END");
  • 有关 DbContext.Database.ExecuteSqlCommand 的更多信息,请查看:msdn.microsoft.com/en-us/library/gg679456(v=vs.113).aspx

标签: entity-framework code-first ef-fluent-api


【解决方案1】:

这是一个我不推荐的解决方案,但如果你想使用DbContext.Database,这里是:

using(var db = new MyDbContext(connectionString))
{
    db.Database.ExecuteSqlCommand("CREATE PROCEDURE MyProcedure ... END;");

    var command = "EXEC MyProcedure;";
    IEnumerable<Customer> customers = db.Database.SqlQuery<Customer>(command, null);
}

【讨论】:

  • 很好,但在这种情况下,调用此过程将如何映射到甚至不存在的模型?我的意思是 ExecuteSqlCommand 在 db 中创建 proc,但是 proc 结果在模型中将没有类表示。
  • 使用DbContext.Database.SqlQuery&lt;T&gt; 将过程结果映射到您的模型中。我已经更新了我的答案
  • 在 Database First 中,EntityFramework 用于创建表示 proc 结果的模型,例如:GetCustomers_Result。还是我必须手动创建?
  • 我现在明白了。 T 表示我在使用 Code First 生成数据库时已经创建的表/实体模型。
  • 我发现以下技术对于在不传递字符串的情况下调用存储过程也很有帮助: var result = db.Set().ToList();在这里找到:stackoverflow.com/a/20905566/2093880
猜你喜欢
  • 1970-01-01
  • 2013-03-02
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-07
  • 1970-01-01
相关资源
最近更新 更多