EF5的身份生成错误

时间:2013-01-16 17:19:30

标签: c# entity-framework entity-framework-5

在我的DbContext中,我重写了SaveChanges方法,为要添加到数据库的实体生成Guid。除了共享主键外,这种方法很好。

它生成不同的Id而不是实体共享的Id。有没有办法检查关系的类型?

  public override int SaveChanges()
  {
      foreach (var entry in ChangeTracker.Entries().Where(e => e.State == EntityState.Added))
      {
          var t = entry.Entity.GetType();
          if (t.GetProperty("Id") == null)
              continue;

          var info = t.GetProperty("Id").GetCustomAttributes(typeof (DatabaseGeneratedAttribute), true).Cast<DatabaseGeneratedAttribute>();
          if (!info.Any() || info.Single().DatabaseGeneratedOption != DatabaseGeneratedOption.Identity)
          {
              if (t.GetProperty("Id").PropertyType == typeof(Guid) && (Guid)t.GetProperty("Id").GetValue(entry.Entity, null) == Guid.Empty)
                  t.GetProperty("Id").SetValue(entry.Entity, Guid.NewGuid(), null);
          }
      }
      return base.SaveChanges();
  }

0 个答案:

没有答案