gpt4 book ai didi

c# - 防止 Entity Framework 在数据库中创建外键

转载 作者:太空宇宙 更新时间:2023-11-03 15:14:57 24 4
gpt4 key购买 nike

我有一个包含以下 POCO 的代码优先数据库:

public Foo {
public int FooId { get; set; }
public virtual ICollection<Bar> Bars { get; set; }
}

public Bar {
public int BarId { get; set; }
public virtual Foo DefaultFoo { get; set; }
public virtual ICollection<Foo> Foos { get; set; }
}

这会在数据库中创建以下表格:

FooId (PK, int, not null)
Bar_BarId (FK, int, null)

BarId (PK, int, not null)
DefaultFoo_FooID (FK, int, null)

FooBar

Bar_BarId (PK, FK, int, not null)
Foo_FooId (PK, FK, int, not null)

如您所见,即使 Foo POCO 没有外键关系,Foo 表也会与 Bar 表建立外键关系-Bar POCO 的一对一导航属性。

但是,如果我从 Bar 中删除 DefaultFoo 属性,则此外键将被删除。

并且,如果我保留 DefaultFoo,但从 Foo 中删除 Bars 并从 中删除 Foos Bar 这个外键被移除了。

换句话说,只有当 DefaultFooFoos 出现在 Bar 上时,这个外键才会出现.

如何让 Entity Framework 创建这个不必要的外键(最好不使用 FluentApi)?

最佳答案

我的猜测是:

  • Foo.Bar_BarId 用于 Bar.Foos
  • Bar.DefaultFoo_FooId 用于 Bar.DefaultFoo
  • FooBar 表用于 Foo.Bars

我没有/不能说为什么。

但对我来说,你必须通过使用一些配置方法来帮助取消默认行为:流利或注释来显式设置多/多关系。

您可以通过使用 linqpad 来挑战它,并检查生成的 sql 是否有一些查询。

关于c# - 防止 Entity Framework 在数据库中创建外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39345142/

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