繁体   English   中英

实体框架-多个组成相同的类

[英]Entity framework - multiple composition to same class

TL; DR

我希望使用不同的方式将使用Entity Framework的多个合成映射到同一个类,该组件具有对作曲家的单个外键,或在两者之间有一个表。

正确的解释

我正在使用Enterprise Architect设计一些代码。 感兴趣的类的UML如下所示:

UML

用C#生成的代码是

public class A
{
    public int id { get; set; }

    public List<B> foo { get; set; }

    public List<B> bar { get; set; }

}

public class B
{
    public int id { get; set; }

    // fields...

}

大! 那就是我想要的。 但是,我的Entity Framework代码优先方法(无法更改,已经在项目中使用了多年)创建的迁移与我希望的完全不一样。

A是仅包含其字段的表(在示例中,为id)。 B如下:

|   id   | field1 | field2 | A_ID1 | A_ID2 |

很好,它可以工作,但是问题是,在实际情况下,我对多个类有大约十种成分。 B的相同实例永远不会在多个类之间共享。 结果是这样的表

|   id   | field1 | field2 | A_ID1 | A_ID2 |
|   1    |   ..   |  ..    |   1   | null  |
|   2    |   ..   |  ..    |   2   | null  |
|   2    |   ..   |  ..    |  null |   3   |

即每行只有一个外键(并且我重复一遍,因为这是我最困扰的问题,有很多外键)不为空,所有其他为空。

您对改善这种映射有什么建议吗? 我正在使用的工具是

企业架构师<->实体框架<-> EF代码优先迁移

从概念上看来,您从AB只有一种关系。 从每个链接,但是您需要知道它是foo还是bar

在逻辑数据模型中,我可能会像这样建模: 在此处输入图片说明

在可以用链接表 ABProperties实施的数据库中,该链接表 ABProperties具有AB的外键,并且具有一个额外的列ABType来容纳FooBar

在FK上向B添加唯一约束应确保上限约束为1,以确保您不能将B行与多个A连接在一起

由于我不熟悉您的代码生成工具集,因此不确定它是否支持关联类。

如果工具集不支持关联类,则可以将类型设置为B类的属性。

在此处输入图片说明

它不像关联类的解决方案那么干净,但是我认为它可以工作,因为B只能是一个A一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM