我有两个实体,我想配置一个可选的1-1关系(即0..1到0..1)。我想在一个实体上使用一个键,同时在两个方向都有导航属性。
考虑以下简化示例来说明:
public class Person
{
public int PersonId { get; set; }
public int? TicketId { get; set; }
public virtual Ticket Ticket { get; set; }
}
public class Ticket
{
public int TicketId { get; set; }
public virtual Person Person { get; set; }
}
有很多人,还有很多门票。一个人最多可以拥有一张票。有人没有票,无人认领的票。
我认为以下内容可行:
modelBuilder.Entity<Person>()
.HasOptional(p => p.Ticket)
.WithOptionalPrincipal(t => t.Person);
但是这会在Ticket表上创建一个额外的ID。
我知道这可以使用两个可选关系,但这不是一个理想的解决方案,因为它需要两次调用SaveChanges,并且不保证参照完整性(例如,Person1可以拥有Ticket1,但Ticket1可以指向Person2)。 / p>
类似的问题通常集中在1-0..1关系上,其中主要实体的主键可以用于依赖关系 - 这也不合适。
我正在使用EF6 Code-First。