如何在 Fluent API 中声明一对多而不是必需的?

How to declare a one-to-many in Fluent API so that it's not required?

假设我们有下面两个类。

class Donkey
{
  public Guid Id { get; set; }
}

class Monkey
{
  public Guid Id { get; set; }
  public Donkey Donkey { get; set; }  
}

我可以配置关系如下。

protected override void OnModelCreating(DbModelBuilder model)
{
  base.OnModelCreating(model);
  model.HasDefaultSchema("dbo");
  ...
  model.Entity<Monkey>
    .HasRequired(_ => _.Donkey)
    .WithMany()
    .Map(_ => _.MapKey("DonkeyId"));
}

我想让它不是必需的,即 Donkey 属性 可以是 null 但是如果不是,它指向 table.

中的一行

我不确定这是否可能,因为作为 FK 依赖于其成为 PK 的目标,而 PK 永远不能为空。但是,在 C# 中,它非常有意义。我可以自由地拥有一只没有附件的 运行 猴子(因为它的驴子是 null),但我也可以给它分配一头驴子,我希望 EF 和导航属性做为我取魔法。

是否可以实现?

您可以使用 HasOptional:

  model.Entity<Monkey>
    .HasOptional(_ => _.Donkey)
    .WithMany()
    .Map(_ => _.MapKey("DonkeyId"));