在entityframework中为“many to many”关系添加值

时间:2013-05-20 19:20:34

标签: entity-framework many-to-many relationship

我在Sqlserver中有3个实体,我使用visual Studio向导进行映射

这三个实体是包类别和packages_categories,其中packages_categories有多对多的关系。 在映射这些实体后,我正在设置2个类,它们是类别和包,它们看起来像这样: 公共部分类包     {         公共包()         {             this.Categories = new HashSet();         }

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

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

公共部分类别     {         公共类别()         {             this.Packages = new 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之一) 当我试图从包中获取信息时,Thing工作得很好然后每当我尝试查询包时,我会得到它的ist包和当我尝试获取类别包时的相同Thing。

问题是,当我尝试更新包并向其添加类别时,该类别不仅会添加到权利packages_categories,还会添加到类别self

代码示例:

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
                           });

现在在这段代码中,一个类别的包将被添加到数据库中,但是如果该类别已经存在,则会抛出一个类别已经存在的异常(假设它已经存在,这意味着它尝试将它添加到Categories self),

我怎样才能解决这样的问题?我究竟做错了什么 :( 非常感谢。

1 个答案:

答案 0 :(得分:2)

为了避免创建新类别,您必须在添加新包之前将它们附加到上下文中:

var _packagesContext=new DBPackages();

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

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