Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 没有共享主键的EF 0..1到0..1关系_Entity Framework_Ef Code First - Fatal编程技术网

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

Entity framework 没有共享主键的EF 0..1到0..1关系,entity-framework,ef-code-first,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 {

我有两个实体,我想配置可选的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);
modelBuilder.Entity()
.has可选(p=>p.Ticket)
.与期权委托人(t=>t.Person);
但这会在Ticket表上创建一个额外的ID

我知道使用两个可选关系可以实现这一点,但这不是一个理想的解决方案,因为它需要两个调用来保存更改,并且不能保证引用完整性(例如,Person1可以拥有Ticket1,但Ticket1可以指向Person2)

类似的问题通常集中在1-0..1关系上,其中主体实体的主键可用于从属关系-这也不合适


我首先使用的是EF6代码。

多对多联接表,但联接表上的每个外键列也有自己的唯一索引?EF不能很好地处理这种关联