我将模型中字段的数据类型从字符串更改为字节数组,并且在运行Update-Database
代码第一次迁移方法时出现此错误。
从数据类型nvarchar(max)到varbinary(max)的隐式转换是 不允许。使用CONVERT函数运行此查询
解决方案是什么?
感谢
答案 0 :(得分:16)
SQL Server无法直接将字符串更改为二进制文件,因此要求您转换数据。关于Code First Migrations,我会从DbMigration中删除AlterColumn语句,而是手动编写:
AddColumn("dbo.TableName", "ColumnNameTmp", c => c.Binary());
Sql("Update dbo.TableName SET ColumnNameTmp = Convert(varbinary, ColumnName)");
DropColumn("dbo.TableName", "ColumnName");
RenameColumn("dbo.TableName", "ColumnNameTmp", "ColumnName")
如果需要,在Down方法中反向。 (以上是伪代码,原谅任何语法错误)
答案 1 :(得分:1)
它不能更改为列数据类型,只需尝试从模型中删除或注释列即可添加迁移和更新数据库,然后在第二步中添加具有byte []数据类型的列并添加迁移igen。不幸的是,如果您在该列中没有任何数据,则会丢失它们。
public class ExampleModel
{
[Key]
public int Id { get; set; }
public string Code { get; set; }
}
评论该列并添加迁移和更新数据库
public class ExampleModel
{
[Key]
public int Id { get; set; }
//public string Code { get; set; }
}
,然后添加具有byte []数据类型的列
public class ExampleModel
{
[Key]
public int Id { get; set; }
public Byte[] Code { get; set; }
}
,现在添加迁移,然后更新数据库。