Asp.net mvc 3 将实体与EF Code First MVC3中的多对多关系相关联,而不是创建实体

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 {

在MVC3 Code First EF中,如何在不创建新实体(多对多)的情况下将一个实体与另一个实体关联

所以我在1班和2班之间有一个多对多的关系。我需要1班来容纳很多2班,反之亦然。然而,class2是独立的;我有一个列表,我想单独编辑,然后与一个新的类关联

当我将class2列表传递给控制器(通过AJAX和JSON)时,我进行了检查,并且class2的所有ID都与数据库中的现有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; }
        }  
}
类
{
[关键]
公共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获取输入 想要从存储库中删除吗
    • 将新条目的属性复制到该上下文条目中
    • 返回上下文条目
希望这对别人有帮助