Asp.net mvc 3 将实体与EF Code First MVC3中的多对多关系相关联,而不是创建实体
在MVC3 Code First EF中,如何在不创建新实体(多对多)的情况下将一个实体与另一个实体关联 所以我在1班和2班之间有一个多对多的关系。我需要1班来容纳很多2班,反之亦然。然而,class2是独立的;我有一个列表,我想单独编辑,然后与一个新的类关联 当我将class2列表传递给控制器(通过AJAX和JSON)时,我进行了检查,并且class2的所有ID都与数据库中的现有ID相对应,即没有创建新的class2 型号Asp.net mvc 3 将实体与EF Code First MVC3中的多对多关系相关联,而不是创建实体,asp.net-mvc-3,entity-framework,c#-4.0,ef-code-first,dbcontext,Asp.net Mvc 3,Entity Framework,C# 4.0,Ef Code First,Dbcontext,在MVC3 Code First EF中,如何在不创建新实体(多对多)的情况下将一个实体与另一个实体关联 所以我在1班和2班之间有一个多对多的关系。我需要1班来容纳很多2班,反之亦然。然而,class2是独立的;我有一个列表,我想单独编辑,然后与一个新的类关联 当我将class2列表传递给控制器(通过AJAX和JSON)时,我进行了检查,并且class2的所有ID都与数据库中的现有ID相对应,即没有创建新的class2 型号 class { [key] public int Id {
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; }
}
}
类
{
[关键]
公共int Id{set;get;}
}
班级1:班级
{
私人ICollection_class2s;
公共虚拟ICollection class2s
{
获取{return _class2s???(_class2s=newhashset());}
设置{u class2s=value;}
}
}
班级2:班级
{
私人ICollection_classas;
公共虚拟ICollection类别
{
获取{return}
设置{u classas=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();
}
公共操作结果保存更改(列表class2List)
{
创建新的Class2和现有的Class2关联(Class2列表);
SaveChangesToDb();
返回视图(“ProductDetail”,模型);
}
createNewClass2AndAssociateExistingClass2s(列表class2List)
{
var newClass1=newClass1()
{
class2s=class2List;
}
////UnitOfWork允许我在一个事务中访问多个数据库集
unitOfWork.Create(新建类别1)
}
SaveChangesToDb()
{
unitOfWork.Commit();
}
这样做的目的是创建一个新的class1(正如它应该做的那样),但不是将现有的Class2与之关联,而是用新的ID创建新的Class2,并将它们添加到数据库中
我的问题:
这是否与EF如何从基类读取我的Id属性有关
我怎样才能将几个现有的class2作为一个列表与一个新的class1关联起来,而不在数据库中创建新的class2
干杯好吧,我从这件事中学到了两件事:
- 当我应该实现一个接口时,我是从一个抽象类继承的。如果您有多个具有类似属性(如“Id”)的实体,并且希望执行以下操作,那么这是一个好主意
T FindById(int-id),其中T:IEntity
- 在EF中进行关联时,即使Id与现有条目匹配,也不会更新该条目,除非EF在上下文中跟踪该条目。我需要做的是:
- 在映射层中添加一个方法,该方法通过id获取输入 想要从存储库中删除吗
- 将新条目的属性复制到该上下文条目中
- 返回上下文条目
希望这对某人有所帮助好吧,我从中了解到两件事:
- 当我应该实现一个接口时,我是从一个抽象类继承的。如果您有多个具有类似属性(如“Id”)的实体,并且希望执行以下操作,那么这是一个好主意
T FindById(int-id),其中T:IEntity
- 在EF中进行关联时,即使Id与现有条目匹配,也不会更新该条目,除非EF在上下文中跟踪该条目。我需要做的是:
- 在映射层中添加一个方法,该方法通过id获取输入 想要从存储库中删除吗
- 将新条目的属性复制到该上下文条目中
- 返回上下文条目