gpt4 book ai didi

entity-framework - 在 EF6 中创建可选的一对一关系

转载 作者:行者123 更新时间:2023-12-04 18:03:53 24 4
gpt4 key购买 nike

有没有办法在 Entity Framework 6 中使用流畅的 API 将两个实体映射为一对一的可选关系?

代码示例 :

// Subscription (has FK OrderId)
this.HasOptional(t => t.Order)
.WithOptionalDependent(t => t.Subscription)
.HasForeignKey(d => d.OrderId); // does not compile

上下文:我为什么要这样做?我在现有系统中工作,其中有购买订阅的付款订单。当订单获得付款时,会创建一个订阅并与之关联,这意味着订阅是可选的。此外,还有其他方法可以创建订阅,这意味着订阅的顺序是可选的。

最佳答案

通常在一对一(或零)关系中,两个实体共享相同的 PK,并且在从属实体中,PK 也指定为 FK。检查这个 link有关这方面的更多信息。但是,如果您的实体不共享相同的 PK,则您无法在依赖实体中添加 FK 属性。如果你这样做,EF 将抛出一个与多重性相关的异常,说它必须是 *.

关于关系的配置,只有一种方法可以将双方的一对一关系配置为可选,这就是您目前使用 Fluent Api 所拥有的。这样你也可以使用 Map使用您在 Subscription 中已有的名称重命名 EF 在依赖表中按约定创建的 FK 列的方法您的数据库中的表。

更新

如果您没有绑定(bind)到现有数据库,您可以执行以下操作:

public class Subscription
{
public int SubscriptionId { get; set; }

public int? OrderId { get; set; }
public virtual Order Order { get; set; }
}

public class Order
{
public int OrderId { get; set; }
public int SubscriptionId { get; set; }

public virtual Subscription Subscription { get; set; }
}

配置是这样的:
 modelBuilder.Entity<Subscription>()
.HasOptional(s => s.Order)
.WithMany()
.HasForeignKey(s=>s.OrderId);

modelBuilder.Entity<>(Order)
.HasOptional(s => s.Subscription)
.WithMany()
.HasForeignKey(s=>s.SubscriptionId);

这样您就可以使用 OrderId FK(还有 SubscriptionId)就像是一对一的关系。这里的问题是您必须分别设置和保存两个关联。

关于entity-framework - 在 EF6 中创建可选的一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30401456/

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