0

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

这三个实体是包类别和packages_categories,其中packages_categories 是多对多关系。映射这些实体后,我得到 2 个类,它们是类别和包,它们看起来像这样: public partial class Package { public Package() { 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之一)一无所获当我尝试获取类别包时,同样的事情。

问题是当我尝试更新一个包并向它添加类别时,该类别不仅会添加到实体 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
                           });

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

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

4

1 回答 1

2

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

var _packagesContext=new DBPackages();

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

_packagesContext.Add(new Packages {
                         packageSid="Sid blaaa.",
                         PackageName="TestPackage",
                         Categories=categoriesList
                     });
于 2013-05-20T19:27:40.263 回答