Тип ParentId и Parent в Entity Framework - PullRequest
0 голосов
/ 16 мая 2010

У меня много лиц (клиенты, перспективы, ...)

У меня есть один объект под названием Notes, который может обрабатывать заметки для клиентов, потенциальных клиентов ... Таблица примечаний тогда: Я бы pARENT_ID PARENT_TYPE Примечание

Как справиться с этим с помощью Entity Framework?

Спасибо Joghn

1 Ответ

0 голосов
/ 16 мая 2010

Не делай этого.

Если вы абсолютно уверены, что все заметки относятся к одному и тому же абстрактному типу данных, даже если они могут принадлежать / использоваться разными типами данных, создайте подтипы заметок для каждого типа владельца / пользователя.

Это делает четыре вещи: он позволяет вам использовать аварийный люк, если крип требования предъявляет, например, заметки клиентов оказываются не такими, как заметки о перспективах, удерживает вас (или Entity Framework ORM) от необходимости писать некрасивый SQL, позволяет вам использовать обычные ограничения ссылочной целостности в базе данных и позволяет использовать достойные ограничения типов в .Net.

В основном:

В базе данных:

create table note ( 
  id int synthetic key of some sort, 
  notetext text 
);

create table customer_note(  
  id int synthetic key of some sort, 
  customer_id int not null references customer(id), 
  note_id not null references note(id)
  -- add requirement creep customer note attribute data here
);

В .net:

void Customer :: addNote (CustomerNote & note) { // ввод текста предотвращает случайное добавление заметки потенциальному клиенту ... }

(Здесь есть только одна «проблема»: когда Prospect превратится в Customer, у вас будет преобразователь, который преобразует это изменение, что в конечном итоге приведет к удалению строк из таблицы prospect_note и вставке их в customer_note. ORM сделает это неэффективный способ, каскадное удаление, но вы сможете переопределить это и сделать это эффективно, если вам нужно, написав сохраненный процесс или тому подобное.)

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