0

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

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

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

据我了解,实施数据库优先方法的全部意义在于,当您有一个预先存在的数据库时,或者如果您更喜欢直接在数据库上进行工作并逐步向上工作,但是,本文档建议继承表(学生,讲师)旨在使用基类上的一个字段在 EF 设计区域创建,他们称之为“鉴别器”字段,您的继承实体最终指向该字段。

但是,我的问题是,为什么您必须在 ER 设计器中创建这些继承的表,您最初打算在其中直接创建表结构,然后再逐步构建实体框架,以及您在 ER 设计器上应用的这种更改将如何(添加继承的表)被映射到后端数据库,当我想稍后对我的数据库进行更改时,我必须在哪里进行这些更改(在 MS SQL 或 ER 上设计师)。如果我最终从 ER 端添加表,那么这将大大违背“数据库优先”方法的目的,因为我基本上最终使用了“模型优先”方法中的过程,这根本没有意义.

非常感谢您帮助解决这个问题。

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

非常感谢

4

1 回答 1

1

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

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

也许您对“必须在 ER 设计器中创建这些继承的表”的想法有点偏心。您定义映射到同一张表的

于 2013-02-23T20:02:19.747 回答