2012-02-23 2 views
1

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

В начале контекст был создан в начале каждого метода обслуживания. Во время работы над производительностью я решил переключиться на контекст для каждого веб-запроса. К сожалению, у меня возникла проблема с наследованием Table-per-Type. У меня есть два объекта: 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».

По достоинству оцените все советы.

ответ

0

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

+0

Мое приложение работает без проблем в течение года. Я столкнулся с проблемой после того, как переключился на контекст для каждого запроса веб-запроса. – muzieh

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