entity-framework - Entity Framework 代码优先和存储过程

标签 entity-framework stored-procedures ef-code-first

我在我的应用程序中使用代码优先方法。我已经使用该方法生成了实体(表)。现在我也想通过代码创建一个存储过程。当我尝试迁移选项但失败时,有人可以指导我吗。

我正在使用 Entity Framework Code First 方法。使用它,我创建了 Customer 和其他一些实体。

现在我想使用上下文类创建一个存储过程“GetCustomers”并传递参数并在集合中获取结果集

它必须返回 2 个集合,如下所示

创建过程 getcustomer @name nvarchar(max),@zipcode int

作为

从名称为 (@name) 的 Customer 中选择 id,name,zipcode;

从 Customer where zipcode =@zipcode 中选择 id,name,zipcode

我想使用上下文类创建一个存储过程“GetCustomers”,而不是在数据库中手动执行。我需要实现以下结果:

1.单独传name参数,返回第一个collection

2.单独传递邮政编码参数并返回第二个集合。

3.使用merge将1和2的结果集合合并成一个集合

最佳答案

您可以使用 CreateStoredProcedure() 方法使用 Add- 创建/生成存储过程 Entity Framework 中的迁移选项。

第 1 步:使用 Package Manager Console 中的 add-migration SP_DO_NOT_DELETE 生成迁移脚本。如果没有 Model Changes,那么系统将生成如下所示的空迁移脚本。

   public partial class SP_DO_NOT_DELETE : DbMigration
   {
      public override void Up()
      {      

      }

      public override void Down()
      {

      }
  }

第 2 步:生成脚本后,请在 Up()down() 方法中添加您的存储过程,如下所示。 注意:在下面的示例中,“dbo.GetNextDisplayId”是存储过程名称,将用于使用存储过程获取 NextAvailableDisplayId。

   public partial class SP_DO_NOT_DELETE : DbMigration
   {
      public override void Up()
      {      
        CreateStoredProcedure(
          "dbo.GetNextDisplayId",
          body:
              @"DECLARE @requestid INT  
                        SELECT @requestid = NextAvailableDisplayId  
                        FROM [TrackingNumberHistories] WITH (TABLOCKX)  

                        UPDATE [TrackingNumberHistories]
                        SET NextAvailableDisplayId = @requestid + 1

                        SELECT @requestid AS 'NextAvailableDisplayId'"
        ); 
       }

       public override void Down()
       {
          DropStoredProcedure("dbo.GetNextDisplayId");
       }
  }

注意:Up() 方法中的CreateStoredProcedure() 会在运行迁移脚本时自动创建存储过程。当我们在迁移脚本中自动回滚/删除存储过程时,Down() 中的 DropStoredProcedure() 将用于删除存储过程。

希望这可以帮助您前进!!

关于entity-framework - Entity Framework 代码优先和存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45785580/

相关文章:

.net - LINQ to Entities 和 String.StartsWith 的问题

c# - 从生成的表中检索数据时对象名称 'dbo.TableName' 无效

java - 使用 JPA 从存储过程中获取 select 语句结果?

mysql - 如何在iReport中获取存储过程的结果?

asp.net-mvc - 何时公开 IEnumerable 而不是 ICollection?

c# - 指定最大长度属性以匹配 varchar(max)

c# - Linq 查询未按预期运行

sql - 一个 StoredProcedure 中的多个更新语句

c# - 由于默认值约束,Code First 迁移失败

c# - Entity Framework 6 mysql rowversion