我正在使用Entity Framework,我不得不添加一些迁移。现在,我想更新客户的应用和数据库。
我考虑使用update-database -script -SourceMigration migrationName
命令,但由于我在其中一次迁移中创建了一个视图,因此在VS控制台中给出了以下异常。
已有一个名为' viewName'的对象在数据库中。
似乎migrate.exe
也可以使用,但我对其功能并不熟悉,我不想在客户的计算机上安装任何东西(因为访问受限)。< / p>
应用这些迁移的最佳方式是什么?我更喜欢使用SQL脚本,但我无法驾驭该异常。
视图的迁移代码:
public override void Up()
{
string script = @"CREATE VIEW [dbo].[viewName]
AS
SELECT *
FROM dbo.existingTable
WHERE (subquery)";
using (var db = new EFDbContext())
{
db.Database.ExecuteSqlCommand(script);
}
}
public override void Down()
{
var script = @"DROP VIEW [dbo].[viewName]";
using (var db = new EFDbContext())
{
db.Database.ExecuteSqlCommand(script);
}
}
答案 0 :(得分:1)
添加视图的更好方法是在Sql
和Up
中使用Down
,其中'Up'将更改应用于目标数据库,'Down'将其还原为:
public override void Up()
{
Sql("EXEC ('CREATE View [dbo].[viewName] AS --etc"
}
public override void Down()
{
Sql(@"IF EXISTS (SELECT
*
FROM sys.views
WHERE object_id = OBJECT_ID(N'dbo.viewName'))
DROP VIEW dbo.viewName)")
}