2

在我的 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();
  }
4

0 回答 0