2010-05-16 71 views
0

我有很多的实体(客户,潜在客户,...)的ParentId和父类型实体框架

我叫票据一个实体,它可以处理客户,潜在客户的笔记... 票据表然后: 标识 PARENT_ID PARENT_TYPE 注

如何与实体框架处理呢?

感谢 Joghn

回答

0

不要这样做。

如果你绝对相信,所有音符都一样的抽象数据类型,即使他们可以拥有/由不同的数据类型使用,建立值得注意的亚型为每个拥有者/用户类型。

这样做有四点:如果需求蠕变使得您可以使用逃生孵化器,例如客户笔记最终与潜在客户笔记不同,使您(或实体框架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:

空隙顾客:: addNote(CustomerNote &注释){// 打字防止意外地添加前景音符给客户 ... }

(只有一个“问题”在这里:当一个前景变成客户,你将有一个转换构造函数,具体化这种变化,这将最终涉及从表prospect_note删除行,并将其插入到customer_note。在ORM将这个做低效的方式,级联删除,但你高效能重写并做到这一点,如果你需要,通过编写存储过程等。)