SQL Layer:Entity Framework наследование
У меня есть таблица
Entity Framwork слой:
У меня есть следующее правило: все предложения, которые имеют государство null, являются выдающимися предложениями, State is true - Accepted offers, State is false - отклоненные предложения. Кроме того, часть полей используется только для выдающихся, частично - только для Accepted и т. Д. Я использую первый подход к базе данных, поэтому я обновил модель EF из базы данных и переименовал объект Offer в базу предложений и создал 3 дочерних класса:
он отлично работает для добавления/выбора объектов/записей. Прямо сейчас я хочу «переместить» предложение из приглашения принять предложение, поэтому мне нужно установить Status = true (от Status is null) для соответствующей записи. Но как это сделать с помощью Entity Framework? Если я пытаюсь выбрать выдающееся предложение, как принять предложение я получаю ссылку на нулевой (и понятно почему)
// record with ID=1 exists, but State is null, so, EF can not find this record and offer will be null after the following string
var offer = (from i in _db.OfferBases.OfType<EFModels.OfferAccepted>() where i.ID == 1 select i).FirstOrDefault();
при попытке выбрать в качестве OfferBase сущности я получаю следующее сообщение об ошибке:
Unable to cast object of type 'System.Data.Entity.DynamicProxies.OfferOutstanding_9DD3E4A5D716F158C6875FA0EDF5D0E52150A406416D4D641148F9AFE2B5A16A' to type 'VTS.EFModels.OfferAccepted'.
var offerB = (from i in _db.OfferBases where i.ID == 1 select i).FirstOrDefault();
var offer = (EFModels.OfferAccepted)offerB;
ДОПОЛНИТЕЛЬНЫЕ ПРИМЕЧАНИЯ О АРХИТЕКТУРЕ:
У меня есть 3 типа объекта предложения. Существуют: AcceptOffer, DeclineOffer и OutstandingOffer.
AcceptOffer:
- UserID
- ContactID
- Notes
- FirstContactDate
- LastContactDate
- [... and 5-10 the unique fields...]
DeclineOffer:
- UserID
- ContactID
- Notes
- [... and 5-10 the unique fields...]
OutstandingOffer:
- UserID
- ContactID
- FirstContactDate
- LastContactDate
- [... and 5-10 the unique fields...]
Как это сделать правильно? Конечно, я могу выбрать запись, удалить из БД и добавить новую с соответствующим значением состояния, но как это сделать обычно?
вы должны прочитать все три статьи [здесь] (http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1- таблица на иерархическом-ТРН). – tschmit007
не нашел ответа на мой вопрос в этих статьях –
С точки зрения ООП. Ты не. Класс - это вещь. Это как сказать, как вы бросаете «Кошку» в «Собака», когда они оба «Животные». Это не имеет никакого смысла. Так что вы делаете неправильно. Класс никогда не должен представлять состояние. – Aron