Entity framework 实体框架代码优先&;存储过程

Entity framework 实体框架代码优先&;存储过程,entity-framework,stored-procedures,ef-code-first,Entity Framework,Stored Procedures,Ef Code First,我在应用程序中使用代码优先的方法。我已经使用这种方法生成了实体(表)。现在我想通过代码创建一个存储过程。当我尝试迁移选项但失败时,是否有人可以指导我 我使用实体框架代码优先的方法。使用这个方法,我创建了Customer和一些其他实体 现在,我想使用上下文类创建一个存储过程“GetCustomers”,并传递参数,然后在集合中获取结果集 它必须返回2个集合,如下所示 创建过程getcustomer@name nvarchar(max),@zipcode int 作为 从Customer中选择id、

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

我使用实体框架代码优先的方法。使用这个方法,我创建了Customer和一些其他实体

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

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

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

作为

从Customer中选择id、name、zipcode,其中name类似(@name)

从客户中选择id、名称和zipcode,其中zipcode=@zipcode

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

1.单独传递name参数并返回第一个集合

2.单独传递zipcode参数并返回第二个集合


3.使用merge将1和2的结果集合合并到单个集合中

您可以使用Add使用CreateStoredProcedure()方法创建/生成存储过程- 实体框架中的迁移选项

步骤1:使用包管理器控制台中的添加迁移SP\u DO\u NOT\u DELETE生成迁移脚本。如果没有模型更改,那么系统将生成如下所示的空迁移脚本

   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()中的strong>DropStoredProcedure()
将用于删除存储过程


希望这能帮助你前进

如果不首先运行addmigration,我们是否应该有一个专用的存储过程文件(就像我们有Context类一样)&在运行updatedatabase时,它应该创建SP@lokanathdas您可以在ModelCreating(DbModelBuilder modelBuilder){modelBuilder.Entity()上使用thi:protected override void.MapToStoredProcedures();}请参阅此链接: