ADO.NET Enity Frame的继承设置 - VS2008(SP1)
以前在VS2005中用过强类型的DataSet, 比较痛苦;相比之下EF会好很多, 如果在EF中使用继承再结合Lambda,对于查询来说确实是方便不少.结合了其他几位高人的文章形成了我这篇文字, 这篇文字主要介绍如何从表之间的主从关系设置为在EF中的"父子关系", 即主从表改为继承关系.
1. 首先, 数据库的结构如下图
(图-1)
从图中可以看出UserOrGroup是Group和User的主表,是一对多的关系, 下面的例子就是要修改这种关系为Group, User继承于UserOrGroup.
2. 在VS2008(SP1) 中,新建一个ADO.NET Entity Data Model对象,默认的文件名是Model1.edmx,然后将图-1所示的表包含到Model1.edmx中,形如
(图-2)
删除图-2中UserOrGroup与User, Group之前的关系(见图-3)
(图-3)
删除User对象的UserID属性, 删除Group对象的GroupID属性
(图-4)
选中UserOrGroup对象,将它的Abstract属性设为True.
现在要设置User, Group与UserOrGroup对象的继承关系,即UserOrGroup是父类, User是UserOrGroup的子类; UserOrGroup是父类, Group是UserOrGroup的子类. 在UserOrGroup对象上点击鼠标右键,在弹出的快捷菜单中依次选择Add->Inheritance,
(图-5)
在弹中的窗口中在Select a derived entity处选择Group, 重复上述步骤并在Select a derived entity处选择User, 以完成User和Group对UserOrGroup的继承
(图-6)
设置好以后最终显示如图-7
(图-7)
因为刚才已删除User, Group与UserOrGroup之间的关系,所以现在要重新建立:设置User.UserID与UserOrGroup.ID关联(图-8), 设置Group.GroupID与UserOrGroup.ID关联(图-9)
注: 只需要设置红框标识的Value/Property地方
(图-8)
(图-9)
GroupMember保存Group与User的关系,刚才在删除User,Group与UserOrGroup关系的同时,GroupMember与Group, User的关系也一起消失,所以这里要重新设置,如图-10
(图-10)
设置好与GroupMember的映射以后就完成了设置User, Group继承UserOrGroup的操作.
结束语: 我也是刚使用ADO.NET Entity, 目前只体验到在涉及关联查询的操作上十分方便。
注: 这不是DDD.
参考引用:
Entity Framework Modeling : Entity Splitting
Entity Framework Modeling: Entity Splitting Part II (adding inheritance)