更新已部署的 Web 应用程序的数据库
Update database of a deployed web app
我正在使用 Entity Framework,我不得不添加一些迁移。现在我想更新客户的应用程序和数据库。
我考虑过使用 update-database -script -SourceMigration migrationName
命令,但它不起作用,因为我在我的一个迁移中创建了一个视图,它在 VS 控制台中给出了以下异常。
There is already an object named 'viewName' in the database.
好像migrate.exe
也可以用,但我对它的功能不是很熟悉,我不想在客户的电脑上安装任何东西(因为访问受限)。
应用这些迁移的最佳方式是什么?我更喜欢用 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);
}
}
添加视图的更好方法是在 Up
和 Down
中使用 Sql
,其中“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)")
}
我正在使用 Entity Framework,我不得不添加一些迁移。现在我想更新客户的应用程序和数据库。
我考虑过使用 update-database -script -SourceMigration migrationName
命令,但它不起作用,因为我在我的一个迁移中创建了一个视图,它在 VS 控制台中给出了以下异常。
There is already an object named 'viewName' in the database.
好像migrate.exe
也可以用,但我对它的功能不是很熟悉,我不想在客户的电脑上安装任何东西(因为访问受限)。
应用这些迁移的最佳方式是什么?我更喜欢用 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);
}
}
添加视图的更好方法是在 Up
和 Down
中使用 Sql
,其中“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)")
}