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