在MVC3代碼優先EF如何將一個實體與另一個實體關聯而不創建新實體(多對多)?關聯實體,不創建,與EF代碼中的多對多關係首先MVC3
所以我有一個多對多的class1和class2之間的關係。我需要class1來保存許多class2,反之亦然。但是,class2是獨立的;我有一份他們想要單獨編輯的列表,然後與一個新的class1關聯。
當我將我的class2List傳遞給控制器(通過AJAX和JSON)時,我檢查了所有class2s的Ids與db中現有的id相對應,即沒有創建新的class2s。
型號
class
{
[key]
public int Id {set; get;}
}
class1 : class
{
private ICollection<class2> _class2s;
public virtual ICollection<class2> class2s
{
get { return _class2s ?? (_class2s = new HashSet<class2>()); }
set { _class2s = value; }
}
}
class2 : class
{
private ICollection<class1> _class1s;
public virtual ICollection<class1> class1s
{
get { return _class1s ?? (_class1s = new HashSet<class1>()); }
set { _class1s = value; }
}
}
控制器
public ActionResult SaveChanges(List<class2> class2List)
{
createNewClass2AndAssociateExistingClass2s(class2List);
SaveChangesToDb();
return View("ProductDetail", Model);
}
createNewClass2AndAssociateExistingClass2s(List<class2> class2List)
{
var newClass1 = newClass1()
{
class2s = class2List;
}
////UnitOfWork allows me to access several DbSets in one transaction
unitOfWork.Create(newClass1)
}
SaveChangesToDb()
{
unitOfWork.Commit();
}
這樣做是創建一個新的class1的(因爲它應該),而是在現有class2s與它相關聯的,它使新帶有新ID的class2s並將它們添加到數據庫中。
我的問題:
這是否有EF如何從基類閱讀我的Id屬性呢?
我怎麼能夠將幾個現有的class2s作爲一個列表與一個新的class1相關聯,而無需在數據庫中創建新的class2s?
乾杯