当前位置: 首页 > 编程语言 > C#

修改实体框架集合;可能无法执行枚举操作共享

时间:2023-04-10 22:22:35 C#

实体框架集合已被修改;枚举操作可能不执行我有问题,错误集合修改的解决方法,枚举操作可能不执行。当“author”和“z”指的是同一个元素时,就会发生这种情况。使用系统;使用System.Collections.Generic;使用System.Linq;使用系统文本;使用System.Data.Entity;namespaceConsoleApplication1{publicclassNation{publicintID{get;放;}publicintname{get;放;}publicvirtualICollectionNationAllys{get;放;}}publicclassNationAlly{publicintID{get;放;}publicintlevel{get;放;}publicNationNatio{get;放;}}publicclassNationsContext:DbContext{publicDbSetNations{get;放;}publicDbSetNationAllys{get;放;}protectedoverridevoidOnModelCreating(DbModelBuildermodelBuilder){modelBuilder.Entity().HasMany(n=>n.NationAllys).WithRequired().Map(conf=>conf.MapKey("OwnerID")).WillCascadeOnDelete(false);modelBuilder.Entity().HasRequired(a=>a.Natio).WithMany().Map(conf=>conf.MapKey("UserID")).WillCascadeOnDelete(false);}}classProgram{staticvoidMain(string[]args){using(varcontext=newNationsContext()){//我们有三个国家和两个盟国国家nation1=newNation(){name=1};民族nation2=newNation(){name=2};民族nation3=newNation(){name=3};添加(国家1);context.Nations.Add(nation2);context.Nations.Add(nation3);context.SaveChanges();}使用(varcontext=newNationsContext()){Nationz=(fromxincontext.Nationswherex.name==1selectx).FirstOrDefault();Nationauthor=(fromxincontext.Nationswherex.name==1selectx).ToList().FirstOrDefault();NationAllyally1=newNationAlly(){Natio=author};//ally1的toNation引用Nation2//ally1.User=author;如果(z.NationAllys!=null){z.NationAllys.Add(ally1);}else{z.NationAllys=newList();z.NationAllys.Add(ally1);}context.SaveChanges();我在EntityFramework4.1和5上测试了代码如果您在创建后立即将ally1添加到上下文中,它将起作用://...NationAllyally1=newNationAlly(){Natio=author};context.NationAllys.Add(ally1);//...问题特别出在你身上案例中的循环引用与...z->z.NationAllyscontainsally1->ally1referencesauthor=z...有关,可能与此有关:EF4.1andthe"Collectionhasbeenmodified;enumerationoperation可能不会执行”异常我无法解释,但它看起来像一个EF错误,因为你的代码应该没问题。该问题与您的循环引用有关。您应该为引用指定零以避免周期性以上是C#学习教程:修改了实体框架集合;枚举运算可能无法完成分享的全部内容,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: