У нас есть проект ef с использованием существующей устаревшей базы данных, но добавление к нему новых таблиц с использованием ef-миграций. Для этих объектов мы создаем таблицы с использованием новой схемы, чтобы отделить их от устаревших таблиц. Мы используем соглашение со множественной формой имени класса в таблицах db. Однако, когда мы добавляем новый класс для сопоставления с устаревшей таблицей (без имени множественной таблицы), ef, похоже, игнорирует отображение. Класс объект:Entity framework-first игнорирует сопоставление таблиц
public class Aktor:IVersionedEntityWithId
{
public int Id { get; set; }
public string Navn { get; set; }
public byte[] Version { get; set; }
}
Отображение кода:
protected virtual void MapAktor(EntityTypeConfiguration<Tilsyn.Domain.Aktor> config){
config.ToTable("dbo.Aktor");
config.Property(v=>v.Version).IsConcurrencyToken().IsRowVersion();
config.HasKey(e=>e.Id);
}
Исключение:
System.Data.EntityCommandExecutionException: Произошла ошибка при выполнении определение команды. Подробнее см. Внутреннее исключение. ---> System.Data.SqlClient.SqlException: Недопустимое имя объекта 'dbo.Aktors'.
Похоже, что сгенерированное sql-объявление еще не присвоено имени класса, чтобы получить имя таблицы. Что отсутствует на этой картинке? Я использую метод ToTable
неправильно?
Обновление: при изменении имени класса на имя, отличное от имени таблицы, оно работает. При повторном изменении имени проблема пропала. Есть ли кеш-память EF или скрытый файл сопоставления?
BTW: 'ToTable' имеет 2-параметрическую перегрузку для отображения таблицы и имени схемы:' config.ToTable («Aktor», «dbo») '. Но это, вероятно, не имеет ничего общего с вашей проблемой. – Slauma