我在 Visual Studio 2012 的 Entity Framework 5 模型设计器中创建了以下模型:
然后我从模型生成数据库,这导致我的数据库中有以下表:
请帮助我理解为什么实体框架会为一对零或一关联生成一对多关系。
更新#1
此外,如果我将关联从 1:0..1 更改为 1:1,如下所示:
然后不仅数据库中仍然没有一对一的关系,而且现在一对多的关系被翻转了,这对我来说似乎更奇怪:
更新#2
回应神秘人的评论和回答,我期望在 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 方法来做到这一点。
这里发生了什么,为什么?
谢谢!