Я создал следующую модель в конструкторе моделей Entity Framework 5 в Visual Studio 2012:
Затем я сгенерировал базу данных из модели, в результате чего в моей базе данных появились следующие таблицы:
Пожалуйста, помогите мне понять, почему Entity Framework создает отношение "один ко многим" для ассоциации "один к нулю или один".
Обновление №1
Кроме того, если я изменю ассоциацию с 1:0..1 на 1:1 следующим образом:
Тогда в базе данных не только нет отношения один к одному, но теперь отношение один ко многим перевернуто, что мне кажется еще более странным:
Обновление №2
В ответ на комментарий и ответ Mystere Man структура, которую я ожидаю увидеть в SQL Server, которая является допустимым отношением 1: 0.. 1, выглядит следующим образом:
Кроме того, я могу заставить это работать точно так, как предполагалось, со следующим беглым отображением Code First:
public class UserMap : EntityTypeConfiguration<User>
{
public UserMap()
{
ToTable("Users");
HasKey(t => t.UserId);
Property(t => t.UserId)
.HasColumnName("UserId");
Property(t => t.Name)
.HasColumnName("Name")
.IsRequired()
.HasMaxLength(50);
Property(t => t.EmailAddress)
.HasColumnName("EmailAddress")
.IsRequired()
.HasMaxLength(254);
Property(t => t.CreatedDateTime)
.HasColumnName("CreatedDateTime");
HasOptional(t => t.Subscription)
.WithRequired(t => t.User);
}
}
public class SubscriptionMap : EntityTypeConfiguration<Subscription>
{
public SubscriptionMap()
{
ToTable("Subscriptions");
HasKey(t => t.SubscriptionId);
Property(t => t.SubscriptionId)
.HasColumnName("SubscriptionId");
Property(t => t.TypeValue)
.HasColumnName("TypeValue");
Property(t => t.CreatedDateTime)
.HasColumnName("CreatedDateTime");
Property(t => t.ExpiresDateTime)
.HasColumnName("ExpiresDateTime");
HasRequired(t => t.User)
.WithOptional(t => t.Subscription);
}
}
Итак, я знаю, что можно добиться такого поведения с помощью Code First Entity Framework. Мой вопрос в том, почему это невозможно сделать с подходом Model First.
Что здесь происходит и почему?
Спасибо!