2011-05-12 69 views
0

所以我有...Code First Entity Framework为什么会生成外键?

public class User 
{ 
    public int ManagerId { get; set; } 
    public Manager Manager { get; set; } 
} 

public class Manager 
{ 
    public User User { get; set; } 
} 

modelBuilder.Entity<User>() 
.HasOptional(x => x.Manager) 
.WithOptionalDependent(x => x.User); 

因此,用户有一个可选的经理和经理可能会或可能不会有一个用户。这适用于该管理器对用户没有外键,但用户对管理器具有可空的外键。但是它产生了外键并将ManagerId视为一个常规属性。我该如何解决?

干杯,伊恩。

+0

删除我的答案,因为它是错的。我不认为这是一对一的关系,这是拉迪斯拉夫回答中解释的另一个故事。 – Slauma 2011-05-12 11:05:20

回答

1

这是一对一的关系。它只有在外键构建在主键上时才有效。你需要像这样的东西:

public class User 
{ 
    [Key, ForeingKey("Manager")] 
    public int Id { get; set; } 
    public Manager Manager { get; set; } 
} 

public class Manager 
{ 
    public int Id { get; set; } 
    public User User { get; set; } 
} 

如果经理有一个用户,用户必须具有与经理相同的PK值。您将无法在双方定义可选的关系,因为它会违反FK。在流利的映射中,你应该这样做:

modelBuilder.Entity<Manager>() 
      .HasOptional(m => m.User) 
      .WithRequired(u => u.Manager); 
相关问题