我正在优化一些查询,我想将其中一个推入存储过程,比如spGetUsers
。
我了解如何从现有存储过程中获取数据,但我该如何确保 - 使用Code-First - update-database
也会导入我的过程并更新其内容需要,处理proc删除等?
答案 0 :(得分:0)
//并更新其内容//
你没有得到任何自动魔法。 您承担维护存储过程的工作。
这是创建EF和使用EF的激励因素之一。不必维护.sql文件。
即使使用"获取",如果您重命名任何内容,仍需要维护。
注意:EF在使用Translate方法创建实体时不会考虑任何映射。它只是将结果集中的列名与类上的属性名匹配。
答案 1 :(得分:0)
您应该能够从迁移脚本中自动执行任何存储过程更新。我建议将每个alter放入一个单独的Sql()方法调用中;如果出现语法错误,诊断起来会更容易。
无论何时运行迁移,您的脚本都会自动运行,并且在降级的情况下可以恢复。
此外,如果您需要执行脚本,则可以运行Sql("exec dbo.TestProc")
public override void Up()
{
Sql(alterProc);
}
public override void Down()
{
Sql(undoProc);
}
string alterProc = @"ALTER PROCEDURE AS BEGIN dbo.TestProc AS BEGIN SELECT 1 END"
string undoProc= @"ALTER PROCEDURE AS BEGIN dbo.TestProc AS BEGIN SELECT 2 END"