2012-05-10 5 views
0

У нас есть проект 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 или скрытый файл сопоставления?

+0

BTW: 'ToTable' имеет 2-параметрическую перегрузку для отображения таблицы и имени схемы:' config.ToTable («Aktor», «dbo») '. Но это, вероятно, не имеет ничего общего с вашей проблемой. – Slauma

ответ

2

Попробуйте переопределить метод OnModelCreating() в вашем подклассе DBContext для создания ваших сопоставлений.

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Tilsyn.Domain.Aktor>().ToTable("dbo.Aktor"); 
} 
+0

Я вижу, что это не очевидно из моих отрывков, но это на самом деле то, что мы делаем. –

+0

Выглядит совсем по-другому. – reach4thelasers

+0

Да, я знаю. Я генерирую класс отображения, используя T4 из всех классов сущностей, а метод в фрагменте вызывается из OnModelCreated. Доверяйте мне :) –

 Смежные вопросы

  • Нет связанных вопросов^_^