Проблема вставки наследования таблицы в тип - PullRequest
3 голосов
/ 30 января 2011

Я следовал этой статье при создании модели наследования таблиц для типов для моих сущностей, но я получаю следующую ошибку при попытке добавить экземпляр подкласса в базу данных.

Вот как я создаю подтип:

var cust = db.Users.CreateObject<Customer>(); // Customer inherits User
db.Users.AddObject(cust);
db.SaveChanges();

При выполнении последнего вызова я получаю следующую ошибку:

"Значение, общее для сущностей или ассоциаций:сгенерировано в нескольких местах. Убедитесь, что отображение не разбивает EntityKey на несколько сгенерированных хранилищем столбцов. "

Со следующим внутренним исключением:

" Элементс тем же ключом уже был добавлен. "

Есть идеи о том, чего мне не хватает?

ОБНОВЛЕНО С ДЕЙСТВИЯМИ REPRO

Создал пустую базу данных MS SQL Server 2008 R2 и добавил две следующие таблицы:

Users

  • Id: bigint (PK и установите его в качестве столбца идентификации)
  • Имя: nvarchar (25) NOT NULL (что угодно, какое-то случайное свойство

Клиенты

  • Id: bigint (PK, столбец идентификаторов и FK для Users.Id)
  • Название: nvarchar (25) NOT NULL (также что-нибудь, некоторыеслучайное свойство)

Далее я сгенерировал модель сущности .edmx из базы данных и перешел по ссылке в верхнем дословном выражении.То есть я удалил связь между Пользователем и Клиентом, установил Пользователя в качестве базового класса Клиента, удалил свойство Id из сущности Клиента и убедился, что столбец Customer.Id был сопоставлен с унаследованным свойством User.Id.,Затем я запустил следующую небольшую программу:

using (var db = new EF_Test.testEntities())
{
    var cust = db.Users.CreateObject<Customer>();
    db.Users.AddObject(cust);
    db.SaveChanges();
}

Я получаю те же исключения, которые я описал выше.Пожалуйста, дайте мне знать, работает ли у вас это воспроизведение, и если да, то что я делаю неправильно.Я заблокирован по этому вопросу.

Ответы [ 3 ]

6 голосов
/ 03 февраля 2011

Я наконец нашел источник своих неприятностей. Для тех, кто все еще интересуется, в таблице «Клиенты» столбец идентификатора не должен быть установлен в для столбца идентификаторов таблицы (хотя с PK и зависимостью FK все нормально).

0 голосов
/ 19 августа 2016

В моем случае проблема заключалась в том, что старая часть нашего кода использовала Map в EntityTypeConfiguration, и я добавил свойство Item, которое заставило EF разделить сущность Item на две таблицы: dbo.Item и dbo.Item1. Решением было посмотреть в БД на свойства в таблице Item1 и добавить их в явное отображение.

0 голосов
/ 30 января 2011

ObjectContext.CreateObject () создает экземпляр T и одновременно добавляет этот экземпляр в экземпляр ObjectContext, из которого был вызван CreateObject ().Итак, ваш явный вызов AddObject () завершается неудачно, потому что объект Customer с таким же ключом уже существует.Правильный код:

var cust = db.Users.CreateOjbect<Customer>();
// modify any properties on the customer instance
db.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...