EntityFramework 4.1 Код первого TPT и целостность данных - PullRequest
1 голос
/ 25 августа 2011

Читая эту статью,

http://weblogs.asp.net/manavi/archive/2010/12/28/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-2-table-per-type-tpt.aspx

и проводя простой тест самостоятельно, я чувствую, что база данных не очень безопасна (от целостности данных).

Я имею в виду, давайте возьмем пример на этой странице:

1 базовый класс и 2 подкласса: base = BillingDetail подклассы = CreditCards, BankAccounts

3 таблицы.BillingDetail имеет первичный ключ, который используется совместно с CreditCards, BankAccounts.

Скажем, из приложения мы создаем объект CreditCards и сохраняем его в базе данных.Мы получаем строку в BillingDetail + строку с тем же идентификатором в CreditCards.

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

Я имею в виду, что такое поведение .... неправильно?

(Не то чтобы меня это слишком беспокоило, но не лучше ли было бы вставить что-то вроде триггера или ограниченияв базе данных для обеспечения целостности?)

1 Ответ

2 голосов
/ 25 августа 2011

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

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

...