2

В моей базовой таблице уже есть идентификатор ID = 5. Как добавить один и тот же идентификатор в специализированную таблицу?Наследование - вставка записей только на специализированную таблицу

Пример:

BaseTable 
ID INT 
Name Varchar(100) 

DerivedTable 
ID INT 
Test BIT 

вставить некоторые значения на базовой таблице

Context.BaseTable.Add(new BaseTable(){ Name = '123' }); 
Context.SaveChanges(); 

Идентичность является 5

Теперь я хочу, чтобы добавить специализированные значения

Context.DerivedTable.Add(new DerivedTable(){ ID = 5, Test = 1 }); 
Context.SaveChanges(); 

Это не работает, linqpad показывает мне, что sql пытается создать новый регистр BaseTable.

Это любой способ обойти это?

Tks

+0

Вы навели на карту их как «Таблица для каждого типа»? – Eranga

+0

@Eranga Я отображается как унаследованная таблица – Alexandre

ответ

2

Если у вас есть он отображается в порядке наследования (EDMX TPT, Code first TPT), вы не должны вставить в базовую таблицу отдельно (она должна быть, скорее всего, абстрактный класс в вашей модели). Вы должны только вставлять в производную таблицу, а EF будет обрабатывать вставку в обе сопоставленные таблицы:

Context.DerivedTable.Add(new DerivedTable(){ Name = "123", Test = 1 }); 
Context.SaveChanges(); 
+0

Это проблема, я не хочу вставлять EF в базовую таблицу, просто на основе – Alexandre

+0

В таком случае вы не можете использовать наследование, и вы должны вместо этого моделировать свои классы с обычным одноразовым, один отношение. –

+0

Я не могу изменить структуру .... Мое обходное решение заключалось в создании процедуры Store и exec через EF. Tks Ladislav – Alexandre

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