我在我的应用程序中使用代码优先方法。我使用这种方法生成了实体(表)。现在我想通过代码创建一个存储过程。当我尝试迁移选项并且它失败时,有人可以指导我。
我正在使用Entity Framework Code First方法。使用此方法,我创建了Customer和其他一些实体。
现在我想创建一个存储过程' GetCustomers'使用上下文类并传递参数并在集合中获取结果集
它必须返回2个集合,如下所示
create procedure getcustomer @name nvarchar(max),@ zipcode int
作为
从Customer中选择id,name,zipcode,其名称如(@name);
从客户处选择id,姓名,邮政编码,其中zipcode = @ zipcode
我想创建一个存储过程' GetCustomers'使用上下文类而不是在DB中手动执行。我需要实现以下结果:
1.单独使用名称参数并返回第一个集合
2.单独使用zipcode参数并返回第二个集合。
3.使用合并
将1和2的结果集合合并到单个集合中答案 0 :(得分:3)
您可以使用Add-使用CreateStoredProcedure()方法创建/生成存储过程 实体框架中的迁移选项。
第1步:使用程序包管理器控制台中的添加迁移SP_DO_NOT_DELETE 生成迁移脚本。如果没有模型更改,则系统将生成如下所示的空迁移脚本。
public partial class SP_DO_NOT_DELETE : DbMigration
{
public override void Up()
{
}
public override void Down()
{
}
}
第2步:生成脚本后,请在向上()和向下()方法中添加存储过程,如下所示。 注意:以下示例," 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()将用于删除存储过程。
希望这可以帮助你前进!!