2013-05-18 2 views
1

У меня следующая ситуация:EF Code First один к одному отношения

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

Но это не годится. Он генерирует SQL, который пытается присоединиться. User.UserID = Address.AddressID

ответ

2

EF создает правильное соотношение для взаимно однозначного отображения. Ваше собственное имя столбца, возможно, смутило вас.

один к одному отношение определяется следующим образом

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

первичного ключа дочерней таблицы (адрес) будет также внешний ключ для родительской таблицы (Пользователь)

Если вы будут содержать столбец UserID в таблице Address и сделать его внешним ключом для таблицы User, тогда это будет отношение «один ко многим», а не взаимно однозначное.

+0

Я хочу, чтобы в моей таблице «Пользователь» был ноль или один «Адрес». Для этого у меня есть уникальное ограничение для таблицы «Адрес». –

+0

В этом случае сделайте отображение следующим образом: entityConfiguration.HasOptional (i => i.Address) .WithRequired (i => i.User); –

+0

Это не работает. Это порождает неправильный SQL. Это то, что у меня уже есть. –

Смежные вопросы