如何在实体框架4.4中添加现有对象ID数组的多对多关系?

时间:2014-04-04 22:35:07

标签: c# .net entity-framework many-to-many

我已经在这个问题上挣扎了好几天,并且相信我这是我的最后一个资源,我尝试了很多东西,但是因为有很多不同的实体框架版本我不知道哪个可以如果有EF专家,请为我工作,求求你帮忙。

我正在尝试在我的数据库中插入多对多的关系,这些关系是几个,并且我已经存储了数组中实体的现有ID。所以现在我有:

Catalog_List_T c = new Catalog_List_T();
c.Name = name;
c.Description = description;
int[] langs = Array.ConvertAll<string, int>(lags.Split(';'), Convert.ToInt32);
foreach (var a in langs)
                {
                    Language_T language = new Language_T() { ID = a };
                    _db.Language_T.Attach(language);                                              
                    _db.Catalog_List_T.AddObject(c);
                    //_db.SaveChanges();
                }


                int[] skills = Array.ConvertAll<string, int>(skillss.Split(';'), Convert.ToInt32);
                foreach (var a in skills)
                {
                    Support_Skill_T skill = new Support_Skill_T() { ID = a };
                    _db.Support_Skill_T.Attach(skill);                        
                    _db.Catalog_List_T.AddObject(c);
                    //_db.SaveChanges();
                }

_db.Catalog_List_T.AddObject(c);
_db.SaveChanges();          

我在这里没有问题,我的意思是我没有遇到任何异常,插入了第一个数据,但这些多对多的关系都没有。因此,插入名称和描述但不插入我的Catalog_List_T实例与Support_Skill_T或Language_T之间的关系,这些都不会发生。如果有人可以帮助或评论任何事情将不胜感激。

更新 我得到异常上下文是使用相同的Key跟踪元素,类似的东西。检查我的ER图。

Here are the relationships in the EF diagram.

1 个答案:

答案 0 :(得分:0)

您实际上并未创建目录列表c与语言和技能之间的关系。您必须通过向目录列表实体的相应导航集添加语言和技能来完成此操作。基本上你必须用两行代替_db.Catalog_List_T.AddObject(c);

c.Languages.Add(language);

...和...

c.Skills.Add(skill);