2013-05-20 27 views
0

我在sqlserver的3個實體,我與Visual Studio的嚮導映射添加值「多對多」中的EntityFramework關係

三個實體包的類別和packages_categories,其中packages_categories一個多對多的關係。 映射這些實體我歌廳2班後至極的分類和包裝,他們是這樣的: 公共部分類包裝 { 公共配套(){ this.Categories =新的HashSet(); }

public string PackageSid { get; set; } 
    public string PackageName { get; set; } 

    public virtual ICollection<Category> Categories { get; set; } 
} 

公共部分類分類01​​{ 公共類別() { this.Packages =新的HashSet(); }

public int CategoryId { get; set; } 
    public string CategoryName { get; set; } 
    public bool isDefault { get; set; } 

    public virtual ICollection<Package> Packages { get; set; } 
} 

,我得到什麼了許多的實體一對多的關係(這個packages_categories的) 大廳東西的偉大工程,當我嘗試從包獲取信息,例如,然後每次我嘗試要查詢一個包,我會得到包含它的ist包和相同的東西,當我嘗試獲取包的類別。

問題是,當我嘗試更新包,並把它添加的類別,則類別將被添加不僅對entitiy packages_categories還要類別自

代碼示例:

var categoriesList=List<Categoriy>(); 


categoriesList.Add(new Cateogry{ 
        categoryname="catem", 
        IsDefault=false, 
        CategoryId=2332 

});

var _packagesContext=new DBPackages(); 
_packagesContext.Add(new Packages{ 
         packageSid="Sid blaaa.", 
         PackageName="TestPackage", 
         Categories=categoriesList 
          }); 

現在,在這個代碼與一個類別中的包將被添加到數據庫,但如果類已經有一個會拋出異常,一個類別已經存在(可以假設它已經存在,這意味着它試圖將它添加到類別自我),

我該如何解決這樣的問題?我在做什麼錯:( 感謝名單非常

回答

2

爲了避免產生新的類別必須將它們附加到上下文你添加新的軟件包之前:

var _packagesContext=new DBPackages(); 

categoriesList.ForEach(c => _packagesContext.Categories.Attach(c)); 

_packagesContext.Add(new Packages { 
         packageSid="Sid blaaa.", 
         PackageName="TestPackage", 
         Categories=categoriesList 
        });