public virtual async Task <Int32> AddAsync(TEntity obj) { try { _context.ChangeTracker.LazyLoadingEnabled = false; _context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; _context.ChangeTracker.AutoDetectChangesEnabled = false; await _context.Set <TEntity>().AddAsync(obj); await _context.SaveChangesAsync(); var keyName = _context.Model.FindEntityType(typeof(TEntity)) .FindPrimaryKey().Properties .Select(x => x.Name).Single(); return((Int32)obj.GetType().GetProperty(keyName).GetValue(obj, null)); } catch (DbUpdateConcurrencyException) { if (!_context.Set <TEntity>().Any()) { return(0); } else { throw; } } }