EF Core 一对一关系,其中双方都是可选的,但其中一个 属性 不可为空
EF Core One to one relation where both sides are optional but one property is not nullable
我有一个看起来像这样的模型:
public class Foo
{
public long Id { get; set; }
public long? BarId { get; set; }
public virtual Bar? Bar { get; set; }
}
public class Bar
{
public long Id { get; set; }
public virtual Foo? Foo { get; set;}
// This would be easy, but I want a one to one relation
// public virtual ICollection<Foo> Foos { get; set; } = new HashSet<Foo>();
}
我现在想配置一对一关系。
棘手的部分是 Bar.Id
可能具有 Foo.BarId
列中不存在的值。
所以这一定是可能的
富
Id
BarId
1
3
2
null
栏
Id
3
4 (no Foo.BarId that matches)
如何使用 DataAnnotations 或 Fluent 配置实现此目的?
试试这个
public class Foo
{
[Key]
public long Id { get; set; }
public long? BarId { get; set; }
[ForeignKey(nameof(BarId))]
[InverseProperty("Foo")]
public virtual Bar Bar { get; set; }
}
public class Bar
{
[Key]
public long Id { get; set; }
[InverseProperty("Bar")]
public virtual Foo Foo { get; set;}
}
但如果您使用 net5+,您可能不需要任何属性或流畅的 Apis
我有一个看起来像这样的模型:
public class Foo
{
public long Id { get; set; }
public long? BarId { get; set; }
public virtual Bar? Bar { get; set; }
}
public class Bar
{
public long Id { get; set; }
public virtual Foo? Foo { get; set;}
// This would be easy, but I want a one to one relation
// public virtual ICollection<Foo> Foos { get; set; } = new HashSet<Foo>();
}
我现在想配置一对一关系。
棘手的部分是 Bar.Id
可能具有 Foo.BarId
列中不存在的值。
所以这一定是可能的
富
Id | BarId |
---|---|
1 | 3 |
2 | null |
栏
Id |
---|
3 |
4 (no Foo.BarId that matches) |
如何使用 DataAnnotations 或 Fluent 配置实现此目的?
试试这个
public class Foo
{
[Key]
public long Id { get; set; }
public long? BarId { get; set; }
[ForeignKey(nameof(BarId))]
[InverseProperty("Foo")]
public virtual Bar Bar { get; set; }
}
public class Bar
{
[Key]
public long Id { get; set; }
[InverseProperty("Bar")]
public virtual Foo Foo { get; set;}
}
但如果您使用 net5+,您可能不需要任何属性或流畅的 Apis