2016-07-11 3 views
1

Я буду использовать Visual Studio 2015, SQL Server 2014, EF 6, MVC 5. EF бросает следующее сообщение об ошибке для меня на SaveChanges():Ошибка преобразования VARCHAR в VARBINARY, но у меня нет VARBINARY колонки

Неявное преобразование из типа данных nvarchar в varbinary (max) недопустимо. Используйте функцию CONVERT для запуска этого запроса.

Я не могу понять, что это неправильно, потому что я не имею никаких varbinary(max) колонн; У меня никогда не было. Почему он пытается конвертировать между ними? В случае, если это имеет значение, я попытался переключить столбцы на varchar, но та же проблема возникает (с varchar в ошибке вместо nvarchar). Как я могу исправить эту проблему?

меня Миграции выключил, помещая это в MyContext конструктору: контекст

Database.SetInitializer<NxContext>(null); 

EF:

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>(); 
    } 
} 

Базовый класс:

public class Person 
{ 
    public int Id { get; set; } 
    public string Email { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

отображение EF. Я попытался указать типы столбцов 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); 
    } 
} 

Упрощенный метод, который обновляет БД:

public class PersonService : IPersonService 
{ 
    public void Create() 
    { 
     using (var db = new MyContext()) 
     { 
      var person = new Person 
      { 
       Email = "[email protected]", 
       FirstName = "TestFN", 
       LastName = "TestLN" 
      }; 
      db.Persons.Add(person); 
      db.SaveChanges(); // error thrown here 
     } 
    } 
} 

DB схемы:

DB schema

+0

Вы обновили файл '.edmx' .. как-то в вашей схеме таблицы, когда вы изначально создали ваши таблицы. – MethodMan

+0

@MethodMan У меня нет файла .edmx, насколько я знаю. ... – vaindil

+0

Действительно ли этот код? Если да, можете ли вы показать свои миграции? Вызывается ли ошибка при создании контекста или при сохранении изменений? – Jcl

ответ

1

После некоторые дискуссии по комментариям, похоже, проблема заключалась в том, что контекст не получал правильную строку соединения, и она использовала другую базу данных o n (localdb), таким образом, странные ошибки.

+0

Большое вам спасибо за вашу помощь, я очень благодарен! – vaindil