代码第一次迁移错误“不允许从数据类型nvarchar(max)到varbinary(max)的隐式转换”

时间:2014-03-02 20:45:05

标签: entity-framework ef-code-first ef-migrations

我将模型中字段的数据类型从字符串更改为字节数组,并且在运行Update-Database代码第一次迁移方法时出现此错误。

  

从数据类型nvarchar(max)到varbinary(max)的隐式转换是   不允许。使用CONVERT函数运行此查询

解决方案是什么?

感谢

2 个答案:

答案 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; }
}

,现在添加迁移,然后更新数据库。