没有共享主键的EF 0..1到0..1关系

时间:2015-06-19 13:10:50

标签: entity-framework ef-code-first

我有两个实体,我想配置一个可选的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。

0 个答案:

没有答案
相关问题