Example #1
0
        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);
            }
        }