我正在使用Visual Studio 2015,SQL Server 2014,EF 6,MVC 5. EF在varbinary(max)
上向我抛出以下错误:
不允许从数据类型nvarchar到varbinary(max)的隐式转换。使用CONVERT函数运行此查询。
我无法弄清楚出了什么问题,因为我没有varchar
列;我从来没有。为什么要尝试在两者之间进行转换?如果它很重要,我尝试将列切换到MyContext
,但同样的问题发生(错误中的varchar而不是nvarchar)。我该如何解决这个问题?
我通过将其放入Database.SetInitializer<NxContext>(null);
构造函数中来关闭迁移:
public class MyContext : DbContext
{
public MyContext() : base("MyContext")
{
Database.SetInitializer<MyContext>(null);
}
public DbSet<Person> Persons { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new PersonMap());
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
EF背景:
public class Person
{
public int Id { get; set; }
public string Email { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
基类:
HasColumnType("nvarchar")
EF映射。我尝试使用public class PersonMap : EntityTypeConfiguration<Person>
{
public PersonMap()
{
Property(u => u.Email).IsRequired().HasMaxLength(320);
Property(u => u.FirstName).IsRequired().HasMaxLength(75);
Property(u => u.LastName).IsRequired().HasMaxLength(75);
}
}
指定列类型,但这没有效果。 (这是EF的默认值,所以它应该是不必要的。)
public class PersonService : IPersonService
{
public void Create()
{
using (var db = new MyContext())
{
var person = new Person
{
Email = "test@example.com",
FirstName = "TestFN",
LastName = "TestLN"
};
db.Persons.Add(person);
db.SaveChanges(); // error thrown here
}
}
}
更新数据库的简化方法:
{{1}}
数据库架构:
答案 0 :(得分:1)
在对评论进行一些争论之后,似乎问题是上下文没有获得正确的连接字符串,并且它在(localdb)
上使用了不同的数据库,因此出现了奇怪的错误。