2011-12-06 47 views
0

如何自動生成一個新的GUID每個實體保存?我不想要一個數據庫生成的Guid。我想在客戶端上生成一個新的GUID,但不希望在每個業務邏輯方法上設置GUID。我在擴展的DbContext類中試過這個:實體框架4.2代碼優先 - 自動生成GUID在客戶端/不分實體保存

public override int SaveChanges() 
    { 
     foreach (var entry in ChangeTracker.Entries<EntityBase<Guid>>() 
      .Where(e => e.State == EntityState.Added)) 
     { 
      if (entry.Entity.Id == Guid.Empty) 
      { 
       entry.Entity.Id = MiscHelper.NewGuidComb(); 
      } 
     } 

     return base.SaveChanges(); 
    } 

但我得到InvalidOperationException集合被修改;枚舉操作可能不會執行。

回答

0

添加.ToList()到查詢的末尾以創建條目引用的複製列表:

foreach (var entry in ChangeTracker.Entries<EntityBase<Guid>>() 
      .Where(e => e.State == EntityState.Added).ToList()) 

這個複製的集合不會被修改,而不會出現例外。