Общие PK и ошибки ObjectContext - PullRequest
       4

Общие PK и ошибки ObjectContext

1 голос
/ 23 февраля 2012

Я использую EF 4.3 в приложении ASP.NET WebForms.Я начал с подхода сначала модели с контекстным объектом типа ObjectContext и генератором кода POCO (через T4).

В начале Контекст создавался в начале каждого метода службы.Работая над производительностью, я решил переключиться на контекст для каждого веб-запроса.К сожалению, я столкнулся с проблемой наследования таблиц по типам.У меня есть две сущности: Offer и OfferEdit.Они находятся в отношениях один к одному, и оба имеют один и тот же первичный ключ.По сути, OfferEdit (таблица OfferEdits) создается после редактирования предложения.

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

var offer = Context.Offer.Where(o => o.Id == offerId).FirstOrDefault()

, когда это предложение уже загружено в Context.Offer.EntitySet:

Все объекты в EntitySet 'RuchEntities.Offer' должныимеют уникальные первичные ключи.
Однако экземпляр типа 'Ruch.Data.Model.OfferEdit' и экземпляр типа 'Ruch.Data.Model.Offer' оба имеют одинаковое значение первичного ключа, 'EntitySet = Offer;Id = 4139 '.

Буду признателен за все советы.

1 Ответ

0 голосов
/ 23 февраля 2012

Похоже, вы неправильно используете наследование TPT.Чтобы было понятно, наследование EF работает точно так же, как и в .NET - сущность может иметь тип Offer или OfferEdit.Вы можете конвертировать OfferEdit в Offer, но это все равно OfferEdit.Он никогда не может быть обоих типов, что означает, что у вас никогда не будет сущности Offer с Id такой же, как у сущности OfferEdit, поскольку один и тот же ключ не может использоваться двумя экземплярами сущности.Вы также никогда не сможете изменить экземпляр Offer на OfferEdit, потому что .NET не позволяет изменять тип существующего экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...