1

我有以下情况:

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" );
}

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

4

1 回答 1

2

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

一对一关系定义如下

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

子表(地址)的主键也将是父表(用户)的外键

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

于 2013-05-18T03:42:52.070 回答