EF Code First一对一的关系

时间:2013-05-18 02:46:39

标签: c# entity-framework ef-code-first one-to-one

我有以下情况:

public class User
{
   public int ID { get; set; }
   public string Name { get; set; }
   // ...
   public virtual Address Address { get; set; }
}

public class Address
{
   public int ID { get; set; }
   public string Street { get; set; }
   public string ZipCode { get; set; }
   // ...
   public int UserID { get; set; }
   public virtual User User { get; set; }
}

我不能为我的生活弄清楚如何设置流畅的映射。我试过这个:

void Map( DbModelBuilder modelBuilder )
{
    var entityConfiguration = modelBuilder.Entity<User>();
    entityConfiguration.HasKey( i => i.ID ).Property( i => i.ID ).HasColumnName( "UserID" );
    entityConfiguration.HasRequired(i => i.Address)
      .WithOptional(i => i.User);
    entityConfiguration.ToTable( "MyUser" );
}

但这并不好。它会生成尝试加入User.UserID = Address.AddressID

的SQL

1 个答案:

答案 0 :(得分:2)

EF正在为一对一映射创建正确的关系。您自己的列命名可能会让您感到困惑。

一对一关系定义如下

User Table            Address Table
----------            -------------
UserId PK             UserID PK, FK
Name                  ZipCode

子表(Address)的主键也将是父表(User)的外键

如果您要在UserID表中包含Address列并将其作为User表的外键,那么这将是一对多关系,而不是一个 - 到酮。