0
我尝试使用迁移将列的数据类型从int更改为字符串,并将枚举的整数值替换为字符串表示形式。实体框架AlterColumn不会在运行查询时更改数据库
我的代码:
AlterColumn("dbo.Tid", "Status", c => c.String(nullable:false));
foreach (var status in Enum.GetValues(typeof(TimelisteStatus)).Cast<TimelisteStatus>())
{
Sql(String.Format("UPDATE dbo.Tid SET [Status] = '{0}' WHERE [Status] = {1}", status, status.ToString("D")));
}
和输出迁移:
Update-Database -TargetMigration:"0" -verbose
Target database is: 'AdTid' (DataSource: ., Provider: System.Data.SqlClient, Origin: Configuration).
Reverting migrations: [201401091224116_Migration
ALTER TABLE [dbo].[Tid] ALTER COLUMN [Status] [nvarchar](max) NOT NULL
UPDATE dbo.Tid SET [Status] = 'Kladd' WHERE [Status] = 10
UPDATE dbo.Tid SET [Status] = 'Avvist' WHERE [Status] = 20
System.Data.SqlClient.SqlException (0x80131904): Conversion failed when converting the nvarchar value 'Kladd' to data type int.
如果我复制粘贴命令到SQL管理器,一切正常,所以我的问题:有没有办法强制在我运行我的更新语句之前提交的ALTER TABLE命令?
ddl语句如'alter table'不需要提交。与你连接你的应用程序到sql server的用户有适当的权利吗? –
刚刚计算出来,UPDATE dbo.Tid SET [Status] ='Kladd'WHERE [Status] = 10需要更新dbo.Tid SET [Status] ='Kladd'WHERE [Status] ='10' For有些原因在管理工作室中有效,但在使用迁移时不适用。 – ruffen