gpt4 book ai didi

database - 我可以先使用 Entity Framework 代码为单个 Collection 属性创建一个单独的表吗?

转载 作者:搜寻专家 更新时间:2023-10-30 20:27:19 27 4
gpt4 key购买 nike

我有一个类FooICollection<string> .为了能够通过 Entity Framework 存储它,我创建了一个类 BarIdValue属性(property)。 Entity Framework 为 Bar 创建一个表外键列为 Foo .这很好用。

问题是我有一大堆类都带有这样的 ICollection<string> .我将它们全部转换为 ICollection<Bar> .然而结果是 Foo表现在包含每个具有 ICollection<Bar> 的类的外键列(10+)。

虽然我知道有必要这样做才能使这些关系在数据库中起作用,但数据库图并没有以这种方式变得更直观。

我在想,就像在多对多关系中一样,我希望在每个关系之间有一个表。例如,

  • 一个表 Foo_Bar有两列:Foo_IdBar_Id Foo之间的关系和 Bar和另一张 table Baz_BarBaz_IdBar_Id .

为此,我可以创建 Bar 的子类(例如 FooBar )对于每个关系;更改集合以使用它们(例如 ICollection<FooBar> );并让 EF 使用每种类型的表(例如,通过用 FooBar 装饰 [Table("Foo_Bar")] )方法为这些类型创建数据库。但我想避免创建所有这些空类。

我想知道是否可以仅基于属性以某种方式指定此行为。像这样:

public class Foo
{
[Table("Foo_Bar")]
public ICollection<Bar> Bars { get; set; }
}

旁注:如果这种方法一开始不是个好主意,请不要犹豫告诉我 :)。

最佳答案

总结评论:

您想要的(即:5 个表)是 Entity Framework 的多对多关系。

按照惯例,您可以通过在两个实体上设置一个集合来获取它

Foo {
ICollection<Bar> Bars
}

Foo {
ICollection<Foo> Foos
}

如果您不想要反向集合 (Foos),则必须通过流畅的 API 设置关系。

modelBuilder.Entity<Foo>.HasMany(x => x.Bars).WithMany()

据我所知,没有注释允许使用注释达到最后的结果。

然后您必须手动处理 Bar 的 Foo 的唯一性。解决方案可能是对 EF 创建的连接表的 Bar Key 的唯一约束。

关于database - 我可以先使用 Entity Framework 代码为单个 Collection 属性创建一个单独的表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25868054/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com