EntityFramework 4.1代码首先是TPT和数据完整性

时间:2011-08-25 07:39:04

标签: entity-framework-4.1 relational-database

阅读本文,

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 subclasses = CreditCards,BankAccounts

3张桌子。 BillingDetail与CreditCards,BankAccounts共享主键。

从应用程序说,我们创建一个CreditCards实体并保存到数据库。我们在BillingDetail中获取一行+在CreditCards中具有相同ID的行。

如果我们转到数据库,并在BankAccounts中手动创建一个具有相同ID的行,它现在也是应用程序中的BankAccounts实体。

我的意思是这种行为......错了?

(并非我对此过于担心,但在数据库中插入类似触发器或约束的内容以确保完整性不是更好吗?)

1 个答案:

答案 0 :(得分:2)

如果您觉得需要额外的完整性,可以随时创建自己的触发器。您所描述的方法确实允许在数据库中使用,但是一旦您进行了此类更改,您的EF应用程序在尝试读取此类损坏的记录时将始终失败。

EF这样做的原因是首先使用代码或首先使用模型是针对数据库仅适用于您的应用程序的情况,因此您不必从其他地方处理此类修改。