1

私はEntity Framework 4コードの最初のアプローチを使用してASP MVC 3でデータベースを設計していますが、 。私は以下のようにPOCOクラスを持っている:同じオブジェクトが正しく構築されていない場合、1対1と多対多の関係

public class User 
{ 
    [Key] 
    public Guid UserID { get; set; } 
    public string UserName { get; set; } 
    public DateTime CreationDate { get; set; } 
    public string Email { get; set; } 
    public int Points { get; set; } 
    public Session ActiveSession { get; set; } 
    public ICollection<Session> InSessions { get; set; } 
} 

Sessionとそのプロパティの一つとしてICollection<User>で、他の場所で定義された私のモデルクラスの別の一つとして。 Userクラスからpublic Session ActiveSession { get; set; }プロパティを削除すると、多対多マッピングとUserSessions中間テーブルが正しく構築されますが、ActiveSessionの1対1マッピングを再度追加すると、多対多中間テーブルは構築されない。代わりにUsersテーブルにはActiveSessionInSessionsプロパティのそれぞれに対してSessionsテーブルへの単一の外部キーがあります。これがなぜ起こっているのか?

+0

設定する必要がありますか? – Eranga

+0

@Erangaこれはかなりです。私はedmxモデルを持たないように、コードの最初のアプローチを使用しています。これまでのところ、流暢なAPIや属性をマッピングする必要はありませんでした。 EFは自分のデータベースを構築しているので、既存のテーブルにマップする必要はありません。 – Kongress

答えて

3

Sessionのクラスでは、ActiveSessionによって作成された1対多の関係の末尾がManyと考えています。

だからあなたはあなたがあなたのマッピングコードを表示することができますmannualy

modelBuilder.Entity<User>().HasOptional(u => u.ActiveSession) 
    .WithMany() 
    .Map(u => u.MapKey("ForeignKeyColumn")); 

modelBuilder.Entity<User>() 
    .HasMany(u => u.InSessions) 
    .WithMany(s => s.Users) 
    .Map(m => 
     { 
      m.ToTable("UserSessions"); 
      m.MapLeftKey("UserID"); 
      m.MapRightKey("SessionID"); 
     });