entity framework集合已被修改; 枚举操作可能无法执行

我有一个问题,错误集合的解决方案被修改,枚举操作可能无法执行。 当“作者”和“z”表示相同的元素时,就会发生这种情况。

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.Entity; namespace ConsoleApplication1 { public class Nation { public int ID { get; set; } public int name { get; set; } public virtual ICollection NationAllys { get; set; } } public class NationAlly { public int ID { get; set; } public int level { get; set; } public Nation Natio { get; set; } } public class NationsContext : DbContext { public DbSet Nations { get; set; } public DbSet NationAllys { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { 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); } } class Program { static void Main(string[] args) { using (var context = new NationsContext()) { // We have three Nations and two Allies Nation nation1 = new Nation() { name = 1 }; Nation nation2 = new Nation() { name = 2 }; Nation nation3 = new Nation() { name = 3 }; context.Nations.Add(nation1); context.Nations.Add(nation2); context.Nations.Add(nation3); context.SaveChanges(); } using (var context = new NationsContext()) { Nation z = (from x in context.Nations where x.name == 1 select x).FirstOrDefault(); Nation author = (from x in context.Nations where x.name == 1 select x).ToList().FirstOrDefault(); NationAlly ally1 = new NationAlly() { Natio = author }; // toNation of ally1 refers to Nation2 // ally1.User = author; if (z.NationAllys != null) { z.NationAllys.Add(ally1); } else { z.NationAllys = new List(); z.NationAllys.Add(ally1); } context.SaveChanges(); } } } } 

我在Entity Framework 4.1和5上测试了代码

如果您在创建后立即将ally1添加到上下文中,它会起作用:

 //... NationAlly ally1 = new NationAlly() { Natio = author }; context.NationAllys.Add(ally1); //... 

问题与您在特殊情况下的循环引用有关…

z – > z.NationAllys包含ally1 – > ally1指的是author = z

……并且可能与此相关:

EF 4.1和“集合已被修改;枚举操作可能无法执行”。 例外

我无法解释它,但它看起来像一个EF错误,因为你的代码应该没有问题。

问题与您的循环引用有关。 您应该为某个引用指定零以避免周期性