如何在 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"));
假设我们有下面两个类。
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"));