【问题标题】:Derived Associations in .Net Entity Framework.Net 实体框架中的派生关联
【发布时间】:2010-08-09 18:18:32
【问题描述】:

我想要一个代表一个人的表,并有许多其他表(例如学生/教师)使用 Person 表来存储与一个人相关的信息。不幸的是,当我尝试在 Student 或 Teacher 类之间添加关联时,实体框架似乎不喜欢它,我不明白为什么。 Person 表包含一个名为 ParentEntityID 的列,它等于 StudentEntityID 或 TeacherEntityID。在理想的世界中,我希望能够通过 Student.Person.FirstName 而不是 Student.Entity.Person1.FirstName 来引用 Person 表。尝试将 Student/Teacher 表连接到 Person 表时,.Net 返回的错误是:

错误 3007:映射问题 从第 265、289 行开始的片段: 非主键列 [ParentEntityID] 被映射到 两个片段到不同的概念 侧面属性 - 数据不一致 是可能的,因为相应的 概念方面的属性可以是 独立修改。

我正在使用的实际数据库有点复杂,并且有许多表连接到实体表,这使得我的对象模型非常模糊,希望能够通过使用实体来清理它框架。

我不是数据库专家,通常我在前端工作......我想做的事情可以完成还是有更好的解决方案?

我在 Web 应用程序中使用 VB.Net 3.5。

alt text http://commonfish.com/images/2010-stackoverflow1.png


更新...

为了内化我可以形成的不同类型的关系,我一直在玩这个简单的例子,并提出了以下可能性: alt text http://commonfish.com/images/2010-stackoverflow2.png

alt text http://commonfish.com/images/2010-stackoverflow3.png

我无法在 Student 和 Address 表之间建立关联的原因是数据库中没有强制执行这种关系。如果我想要这两个表之间的关联,我需要重新考虑我的数据库的设计。那是对的吗? Entity Framework 不支持我想做的事?

另外,从 Pratt 先生那里看a page linked,听起来 .Net 4 支持外键关联,我认为这就是我想要做的。我对那篇文章的理解正确吗?

【问题讨论】:

    标签: sql-server vb.net entity-framework


    【解决方案1】:

    我相信您遇到了错误,因为实体框架只需要一个关系/导航属性来拥有或管理“ParentEntityID”属性。例如,如果您要在“Person”实体上同时设置“Teacher”和“Student”导航属性,EF 将不知道哪个应该“获胜”。

    一个“人”可以同时是“学生”和“老师”吗?如果不是,我建议将其建模为“学生”和“教师”实体,通过 TPT(每个类型的表)继承 (example) 从“个人”继承。

    【讨论】:

    • 我无法通过继承来连接它们,因为教师/学生表的主键没有链接到 Person 的主键,而是链接到了 Person 表中的 ParentEntityID。它的结构是这样的,因此教师/学生也可以通过自己的 EntityID 链接到地址、电话等表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2012-04-10
    • 2011-03-14
    • 1970-01-01
    相关资源
    最近更新 更多