为什么Code First Entity Framework会生成外键?

时间:2011-05-12 10:18:44

标签: mapping ef-code-first entity-framework-4.1

所以我有......

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视为常规属性。我该如何解决这个问题?

干杯,伊恩。

1 个答案:

答案 0 :(得分: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);