public static async Task BulkInsertWithIdGeneration <T>(this IContextAdapter contextAdapter, IList <T> forSave) where T : class { if (forSave == null) { return; } var pk = contextAdapter.GetPk <T>(); if (!pk.IsIdentity) { await contextAdapter.BulkInsert(forSave, true); } else { var isNew = ExpressHelper.IsPropertyEmpty <T>(pk.PropertyName, pk.Type).Compile(); var newObjects = forSave.Where(isNew).ToArray(); if (!newObjects.Any()) { return; } await contextAdapter.RetrieveIds(newObjects); await contextAdapter.BulkInsert(newObjects, true); } }