zoukankan      html  css  js  c++  java
  • 利用ORM工具实现单表继承的实践

    近拿一个小项目作Entity Framework练手的实例。方法与步骤很简单:新建一个项目,为其添加ADO.NET 实体数据模型,随后利用VS2010提供的ORM工具,设计好数据库的关系图(edmx文件),再利用ORM工具逆向生成数据库的生成脚本(sql文件),最后运行该sql脚本即可生成我们需要的数据库了。

    我在这个类似进销存的项目里,使用了继承结构表达货物的进出库记录—即用一个Record实体及其派出生的3个实体类Incoming、Outgoing、Wear来表达之。在数据库的那头,则生成一张表Records,结合单表继承以实现业务逻辑中进库记录、出库记录、损耗记录的结构。

    但我采用前述的步骤生成的数据库,却并没有将Record及其派生实体类的字段全部放入Records表中,而是对应Record及其3个派生实体类的结构,在库中生成了4张表。他们分别对应Record、Incoming、Outgoing、Wear四个实体。并且,在Records表与其他3表间,自动利用Record表的PK字段ID建立了表间关系,这使得整个数据库臃肿了许多。

    最后,经反复试验了多次,换了若干不同种生成方式,才发现:要较好实现前述TPH,需要在数据库一头先定义这张表,其中包括基类及其派生类的所有字段,然后利用数据库生成ORM模型,再修改ORM模型并添加派生类、建立继承关系、映射关系和映射条件,之后再用ORM模型逆向更新数据库结构,即可达成前述目标。


    [注]:单表继承,或称每个层次结构一个表”的继承。我曾在LINQ to SQL的学习笔记中提到过单表继承(http://www.cnblogs.com/Abbey/archive/2011/07/17/2107917.html),但是LINQ to Entity与之有较大的不同,没有鉴别器Attribute的修饰,LINQ to Entity中的单表继承实现相对变化了许多。具体可参见MSDN中的范例:http://msdn.microsoft.com/zh-cn/library/dd793152.aspx


    转载请注明出处及作者,谢谢!
  • 相关阅读:
    12.12
    12.11
    1208
    1206
    2018-12-23丛晓强作业
    2018-12-17面向对象总结
    2018-12-17-丛晓强作业
    2018-12-13丛晓强作业
    2018-12-12丛晓强作业
    2018-12-11丛晓强作业
  • 原文地址:https://www.cnblogs.com/Abbey/p/2241650.html
Copyright © 2011-2022 走看看