Entity framework - 多个组合相同 class

Entity framework - multiple composition to same class

TL;DR

我希望使用 Entity Framework 以不同的方式映射相同 class 的多个组合,组件具有一个指向作曲家的外键,或者 table介于两者之间。

正确解释

我正在使用 Enterprise Architect 设计一些代码。感兴趣的 classes 的 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 是一个 table,只有它的字段(在示例中为 id)。 B如下:

|   id   | field1 | field2 | A_ID1 | A_ID2 |

嗯,它有效,但问题是在真实场景中,我有大约十个组合到多个 classes。 B 的同一个实例 永远不会 在多个 class 之间共享。结果是这样的table

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

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

您对改进此映射有什么建议吗?我使用的工具是

Enterprise Architect <-> Entity Framework <-> EF 代码首次迁移

从概念上讲,您似乎只有从 AB 的一种关系。从每个 link 但是你需要知道它是 foo 还是 bar

在逻辑数据模型中,我可能会这样建模:

在一个可以用 link table ABProperties 实现的数据库中,AB ,并且有一个额外的列 ABType 包含 FooBar

对B的FK添加唯一约束应该保证上界约束为1,确保不能将一行B与多个A[=27=连接起来]

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

如果您的工具集不支持关联 classes,您可以将类型设置为 B class.

的 属性

它不像关联 class 的解决方案那么干净,但我认为它会起作用,因为 B 只能是一个 A

的一部分