2016-04-18 9 views
1

異なるエンティティにオブジェクトを保存...基本的に私は2クラス、部門や場所を持っています。 DepartmentにはICollectionのLocationがありますが、LocationにはDepartmentIDがありません(LocationはDepartmentに固有ではなく、同じ場所を別のDepartmentsまたは別のテーブルに追加できるため)。私は部門を作成し、それに場所を追加しようとするたびにEntity Frameworkは:私はこの問題で苦労してい

public class Department 
{ 
    public Department() 
    { 
     this.LocationList = new HashSet<Location>(); 
     this.JobList = new HashSet<Job>(); 
    } 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public string Code { get; set; } 
    public virtual ICollection<Location> LocationList { get; set; } 
    public virtual ICollection<Job> JobList { get; set; } 

} 


public class Location 
    { 

     public int id { get; set; } 
     public string Name { get; set; } 
     public string Adress { get; set; } 

    } 

は、場所は(と思う?)私のすべての悪の根であるDepartment_IDと呼ばれる新しい属性を取得します。私はID = 1Location1を追加し、ID = 2を持つ別のLocation2のであれば、両方の場所は、Department_ID = 1(または別の整数...)ということになります。しかし、私が新たに作成したDepartmentにLocation1を追加しようとすると、そのDepartmentは他のDepartmentのLocationListからその場所を「盗む」でしょう。私はそれがDepartment_ID changesであると推測しています。どうしたらいいですか?他の部門からLocation1を離れることはありませんか?どんな助けもありがとう。前もって感謝します!

+0

あなたのデータベースをチェックして、そのモデル化方法を確認しましたか?あなたはM対N relatioshipについて読む必要があるように見え、この作業をするためには他のテーブルを取得する必要があります。 –

+0

これは多分多くの関係です。私はLocationクラスでDepartementのコレクションを持っている必要があると思いますか? – Amine

+0

あなたが説明したように、あなたのデザインをチェックしてください。場所には部署のコレクションが必要であり、所在地には場所のコレクションがありません。 – MNF

答えて

1

あなたは、EFは、あなたは多対多の関係を持っていることを知っている必要があります。現在、EFは一対多を見ています。

あなたはLocationICollection<Department>を追加したり、流暢それを設定することができます。

ドキュメント:Configure Many-to-Many relationship:

1

あなたLocationDepartmentクラス間の関係は、多くの多くのです。 Location複数Department Sに関連することができ、Departmentが複数のLocation Sに関連することができますを意味します。
があなたのLocationクラスの新しいプロパティを定義します。

public Location() 
{ 
    this.Departments = new HashSet<Department>(); 
} 

public virtual ICollection<Department> Departments { get; set; } 

次に、あなたのコンテキスト内で、適切な関係を定義するために流暢なマッピングを使用します。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Department>() 
      .HasMany<Location>(s => s.Locations) 
      .WithMany(c => c.Departments) 
      .Map(cs => 
        { 
         cs.MapLeftKey("DepartmentId"); 
         cs.MapRightKey("LocationId"); 
         cs.ToTable("DepartmentsLocations"); 
        }); 

} 

これは、2つの列を使用してデータベースにDepartmentsLocationsテーブルを作成します。 :DepartmentIdLocationIdは、部署と場所の多対多の関係を処理します。

関連する問題