本文将介绍ADO.NET Entity Framework继承的三种形式:一体系一表方式、一类一表方式、一具体类一表方式,希望本文能对大家有所帮助。

承继在各种编程中运用许多,可是ADO.NET Entity Framework承继还存在必定程度的缺乏,很或许呈现映射过错,有必要手艺来保护EDMX中的MSL部分。

ADO.NET Entity Framework承继(以下简称ADO.NET EF)有一个十分可信的运行时。之所以不敢在项目中广泛运用是因为其糟糕的规划时。这个DSL规划时糟糕在哪里呢?其一,只能是先规划好数据库后规划实体模型;其二,假如你修正了数据库结构,再更新实体模型时,你所做的修正悉数报废,最糟糕的是,很或许会呈现映射过错,你有必要手艺来保护EDMX中的MSL部分。一般数据库结构的修正会成为你的噩梦。

还有必要指出一点,ADO.NET Entity Framework承继在MSDN中的文档是有问题的。不信你看我的发现:MSDN,微软怎么会这样啊?

不得不供认,ADO.NET Entity Framework承继的运行时对承继联系的处理是十分让人舒畅的。本文带你去体会一下ADO.NET EF的承继。

与一般的承继联系映射相同,支撑三种方法:

◆一体系一表方法

◆一类一表方法

◆一详细类一表方法

关于***种方法和第三种方法,我是十分不屑的。我有文章讲过我的观点:细说承继联系映射。

***种方法有一篇文章现已讲了详细的操作方法:Single Table Inheritance in Entity Framework。这种方法有什么问题呢?那个“Type”字段咱们是能够承受的,因为在运行时这个字段完全是通明的;可是那个“Salary”、“Rate”和“Hours”能够为空,这个咱们不能承受,因为这意味着例如咱们存贮一个SalariedExployee实体,能够毫不隐讳地不给Salary赋值,而导致事务过错。这便是我所恶感的“可空冗余”。不过凡事都有破例,假如派生类中的特点刚好都是可空的,那这个可空就不冗余了,而单表承继简略高效的优点就能够坐收了。

第三种方法我是无法承受的,因为底子处理不了我屡次说到的“联系同享”的问题。

还好,ADO.NET EF供给了***的第二种方法支撑。有文章讲这个方法:

Entity Framework Modeling : Entity Splitting

Entity Framework Modeling: Entity Splitting Part II

不过,我没有按这篇文章所提示的方法设置成功,或许我的环境不同。重要的是,我理解了设置承继的几个要害:***,不要手艺修正BaseType来设置承继,而是要用上下文菜单中的“增加”→“承继”的方法。咱们所以信任,除了BaseType以外,ADO.NET EF的DSL为EDMX中的MSL部分参加了某些内容。第二,手艺删去派生类中的要害字段特点。第三,留意操作次序。

现在用一个实例来阐明。这个比如用于处理关于权限的问题。事务体系对权限的判别仅依据其是否具有某个“权柄”。这个权柄用一个字符串表明在Privilege表中。这个权柄只能够颁发给人物。用户和用户组都能够隶属于某个人物,用户组中的用户能够从该用户组承继一切的人物。实际上的运用或许会在权柄上再做一些文章,例如加上权柄效果域目标。这与本主题没有联系,就此省掉。

下图是数据库的规划:

ADO.NET Entity Framework承继的三种方式  Frame 第1张

在Visual Studio 2008中树立一个类库项目。新增一个名叫“InheritanceDemoModel.edmx”的实体数据模型,并从树立好的数据库生成,把实体衔接设置命名为“DemoEntities”。所以,得到这个开始的效果:

ADO.NET Entity Framework承继的三种方式  Frame 第2张

先删去UserOrGroup和User之间的联系,再删去UserOrGroup与Group之间的联系,然后把一切的实体集称号改成复数。

现在参加两个承继联系:一个是UserOrGroup为基,Group为派生;另一个是UserOrGroup为基,User为派生。然后,变成这样:

ADO.NET Entity Framework承继的三种方式  Frame 第3张

下一步,先把UserOrGroup的“笼统”特点改为“true”,再删去User的UserId特点和Group的GroupId特点。删去这两个特点今后,要别离把本来的两个字段(Column)映射到UserOrGroup的Id字段:

ADO.NET Entity Framework承继的三种方式  Frame 第4张

ADO.NET Entity Framework承继的三种方式  Frame 第5张

***一步,因为删去了User的UserId特点和Group的GroupId特点,Group的Users特点和User的Groups特点映射被破坏了,需求从头映射:

ADO.NET Entity Framework承继的三种方式  Frame 第6张

保存,完结映射。接下来能够做几个测验,例如,测验别离创立几个Privilege、Role、Group、User,然后用一个简略的Linq表达式来获取某个User一切的权柄。

代码就不贴了,有爱好下载代码吧。

ADO.NET Entity Framework承继的三种方式就介绍到这儿。

【修改引荐】

  1. 什么是ADO.NET:数据源的衔接纽带
  2. 浅谈怎么更好的翻开和封闭ADO.NET衔接池
  3. ADO.NET中SQL Server数据库衔接池
  4. ADO.NET中的多数据表操作读取
  5. 浅谈ADO.NET中的五个首要目标
转载请说明出处
知优网 » ADO.NET Entity Framework承继的三种方式

发表评论

您需要后才能发表评论