【发布时间】:2015-06-30 00:36:56
【问题描述】:
鉴于此迁移:
public override void Up()
{
AddColumn("dbo.ClientData", "ExFirstName", c => c.String(maxLength: 2));
Sql(@"UPDATE [ClientData]
SET ExFirstName = LEFT(EX,2)
WHERE RandomEX = 0
AND LEN(EX) = 8");
然后我生成迁移作为 sql 脚本提供给 dba
ALTER TABLE [dbo].[ClientData] ADD [ExFirstName] [nvarchar](2)
UPDATE [ClientData]
SET ExFirstName = LEFT(EX,2)
WHERE RandomEX = 0
AND LEN(EX) = 8
然后在运行时它在 UPDATE 上失败,因为 ALTER TABLE 后面没有“GO”。
这是确切的错误: 消息 207,级别 16,状态 1,服务器 MYSERVER\SQLSVR,第 34 行 列名“ExFirstName”无效。
我通过在带和不带 GO 的 ssms 中运行上面的 sql 确认了这一点。
在代码中运行迁移时:
if (RunEFMigrations(dataSource))
{
var efConfiguration = new NEX.Data.Migrations.Configuration();
var migrator = new DbMigrator(efConfiguration);
migrator.Update();
}
迁移工作正常。
除了将上述迁移和我的其他 80 多个 EF 迁移分成两个 EF 迁移之外,我是否在 EF 配置或 SQL Server 中还有其他选项?
【问题讨论】:
-
我不认为有任何现成的解决方案,因为 MSSS
Name Resolution就是这样设计的。检查这个:blog.sqlauthority.com/2008/07/15/… -
我认为
AddColumn可以调整,以便在每次通话结束时生成Go命令。但是当您不想为您的 DBA 生成脚本(即您想在本地工作)时,您必须关闭此功能。如果你愿意,我可以为你提供这个(有点讨厌但有效)的解决方案
标签: sql-server entity-framework