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