Visual Studio 2012 の Entity Framework 5 モデル デザイナーで次のモデルを作成しました。
次に、モデルからデータベースを生成すると、データベースに次のテーブルが作成されました。
Entity Framework が 1 対 0 または 1 の関連付けに対して 1 対多の関係を生成する理由を理解してください。
更新 #1
さらに、関連付けを 1:0..1 から 1:1 に変更すると、次のようになります。
次に、データベースにまだ 1 対 1 の関係が存在しないだけでなく、1 対多の関係が逆転しているため、さらに奇妙に思えます。
アップデート #2
Mystere Man のコメントと回答に応えて、有効な 1:0..1 の関係である SQL Server で見られると予想される構造は次のとおりです。
さらに、次の Code First fluent マッピングを使用して、これを意図したとおりに機能させることができます。
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 アプローチではなぜそれができないのかということです。
ここで何が起こっているのですか?
ありがとう!