在 MVC3 Code First EF 中,如何在不创建新实体(多对多)的情况下将一个实体与另一个实体关联?
所以我在class1和class2之间有一个多对多的关系。我需要 class1 来容纳许多 class2,反之亦然。但是,class2 是独立的;我有一个列表,我想单独编辑它们,然后与新的 class1 关联。
当我将我的 class2List 传递给控制器(通过 AJAX 和 JSON)时,我检查了 class2 的所有 Id 对应于 db 中的现有 id,即没有创建新的 class2。
模型
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(应该如此),但不是将现有的 class2 与其关联,而是使用新的 Id 创建新的 class2 并将它们添加到数据库中。
我的问题:
这是否与 EF 如何从基类读取我的 Id 属性有关?
我如何能够将几个现有的 class2 作为列表与新的 class1 相关联,而不在数据库中创建新的 class2?
干杯