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 代码首次迁移
从概念上讲,您似乎只有从 A
到 B
的一种关系。从每个 link 但是你需要知道它是 foo
还是 bar
在逻辑数据模型中,我可能会这样建模:
在一个可以用 link table ABProperties
实现的数据库中,A
和 B
,并且有一个额外的列 ABType
包含 Foo
或 Bar
对B的FK添加唯一约束应该保证上界约束为1,确保不能将一行B
与多个A
[=27=连接起来]
由于我不熟悉您的代码生成工具集,我不确定它是否支持关联 classes。
如果您的工具集不支持关联 classes,您可以将类型设置为 B
class.
的 属性
它不像关联 class 的解决方案那么干净,但我认为它会起作用,因为 B
只能是一个 A
的一部分
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 代码首次迁移
从概念上讲,您似乎只有从 A
到 B
的一种关系。从每个 link 但是你需要知道它是 foo
还是 bar
在逻辑数据模型中,我可能会这样建模:
在一个可以用 link table ABProperties
实现的数据库中,A
和 B
,并且有一个额外的列 ABType
包含 Foo
或 Bar
对B的FK添加唯一约束应该保证上界约束为1,确保不能将一行B
与多个A
[=27=连接起来]
由于我不熟悉您的代码生成工具集,我不确定它是否支持关联 classes。
如果您的工具集不支持关联 classes,您可以将类型设置为 B
class.
它不像关联 class 的解决方案那么干净,但我认为它会起作用,因为 B
只能是一个 A