使用“数据库优先”方法实现TPH

时间:2013-02-23 16:52:52

标签: entity-framework entity-framework-4 entity-framework-5

我正试图在Microsoft的以下文档的帮助下使用“数据库优先”实现EF TPH,

http://msdn.microsoft.com/en-us/data/jj618292.aspx

我确实理解这是如何运作的,但它听起来有点天真,或者我错过了一些我希望有人能够启发我的东西。

根据我的理解,实现数据库第一种方法的重点是当你有一个预先存在的数据库,或者如果你更喜欢亲自在数据库上工作并按照自己的方式工作,那么,本文档建议继承表(Student,Instructor)是指在EF设计区域使用基类上的字段创建的,它们称为“Discriminator”字段,您的继承实体最终指向该字段。

但是,我的问题是,为什么你必须在ER设计器上创建这些继承的表,你最初打算在实现实体框架之前先创建表结构,以及如何改变你应用的ER设计器(添加继承的表)被映射到后端数据库,并且在我希望稍后更改我的数据库的那一天结束时,我将在哪里进行这些更改(在MS SQL上)或ER设计师)。如果我最终从ER端添加表,那么这几乎会破坏“数据库优先”方法的目的,因为我基本上最终使用了“模型优先”方法中的程序,这根本没有意义

我非常感谢你帮助清理它。

请注意:我宁愿在我的数据库中完成所有操作,而不是使用“模型优先”方法。我有兴趣实现TPH并能够直接对我的数据库进行任何更改,并将这些更改映射到我的EF子层(而不是相反)。

非常感谢

1 个答案:

答案 0 :(得分:1)

我不知道EF怎么能为你推断继承。也许它可以通过表中明确命名为“Discriminator”的字段来触发它,但是如果你想要一个不同的鉴别器名称呢?然后,派生类的名称应该是什么? EF没有任何线索。名称在数据模型中没有任何地方。

仍然是数据库优先。但EF只是创建了映射的初稿。几乎总是需要对概念模型(您在edmx中看到的模型)进行修改,例如重命名属性或类,重命名/添加/删除关联。或者应用继承。从数据库更新模型时,可能需要应用一些更多的手动更改。例如,使用TPH继承,您可能必须决定在哪个类中放置一个新字段。

也许你有点想到你必须在ER设计师那里创建这些继承的。您可以定义映射到同一个