Пример #1
0
        public async Task CreatesNpgSqlComposite()
        {
            var parent = new Efcoretest
            {
                Name         = $"{nameof(BulkAddTests)}_Composite",
                Createddate  = DateTime.UtcNow,
                Modifieddate = DateTime.UtcNow
            };

            using (var db = new postgresContext())
            {
                await db.AddAsync(parent);

                await db.SaveChangesAsync();
            }

            var toCreate = new List <Efcoretestchild>();

            for (var i = 0; i < 10; i++)
            {
                toCreate.Add(new Efcoretestchild
                {
                    Efcoretestid = parent.Id,
                    Name         = i == 0 ? null : $"{nameof(BulkAddTests)}_{i}",
                    Createddate  = DateTime.UtcNow,
                    Modifieddate = DateTime.UtcNow
                });
            }

            using (var db = new postgresContext())
            {
                await db.Efcoretestchild.BulkAddAsync(toCreate);

                foreach (var e in toCreate)
                {
                    var added = await db.Efcoretestchild.FindAsync(e.Id, e.Efcoretestid);

                    Assert.NotNull(added);
                    Assert.Equal(e.Name, added.Name);
                }
            }
        }
Пример #2
0
        public async Task NpgSqlCommit()
        {
            using (var db = new postgresContext())
                using (var scope = db.Database.CurrentTransaction ?? db.Database.BeginTransaction())
                {
                    var toAdd = new Efcoretest
                    {
                        Name         = $"{nameof(BulkTransactionTests)}_Added",
                        Createddate  = DateTime.Now,
                        Modifieddate = DateTime.Now
                    };

                    await db.Efcoretest.AddAsync(toAdd);

                    await db.SaveChangesAsync(false);

                    var ids = await db.Efcoretest
                              .Where(x => x.Name.Contains(nameof(BulkTransactionTests)))
                              .Select(x => x.Id)
                              .ToListAsync();

                    await db.Efcoretest
                    .Where(x => x.Name.Contains(nameof(BulkTransactionTests)))
                    .BulkRemoveAsync(ids);

                    scope.Commit();
                }

            using (var db = new postgresContext())
            {
                var count = await db.Efcoretest
                            .Where(x => x.Name.Contains(nameof(BulkTransactionTests)))
                            .CountAsync();

                Assert.Equal(0, count);
            }
        }
Пример #3
0
        public async Task MergesNpgSql(BulkMergeNotMatchedBehavior notMatchedBehavior)
        {
            List <Efcoretest> entities;

            var dontDelete = new Efcoretest
            {
                Name         = "dont delete",
                Createddate  = DateTime.UtcNow,
                Modifieddate = DateTime.UtcNow
            };

            using (var db = new postgresContext())
            {
                entities = await db.Efcoretest
                           .Where(e => e.Name.Contains(nameof(BulkMergeTests)))
                           .ToListAsync();

                var added = await db.AddAsync(dontDelete);

                await db.SaveChangesAsync();

                dontDelete.Id = added.Entity.Id;
            }

            const int numUpdate = 5;

            var toMerge = entities
                          .OrderBy(e => e.Id)
                          .Take(numUpdate)
                          .Select(x =>
            {
                x.Modifieddate = DateTime.UtcNow.AddDays(x.Id);
                return(x);
            })
                          .ToList();

            var numNotMatched = entities.Count - toMerge.Count;

            var numAdd = 2;

            for (var i = 0; i < numAdd; i++)
            {
                toMerge.Add(new Efcoretest
                {
                    Name         = $"{nameof(BulkMergeTests)}_insert_{i}",
                    Modifieddate = DateTime.Now,
                    Createddate  = DateTime.Now
                });
            }

            var expectedRecordsAffected = notMatchedBehavior == BulkMergeNotMatchedBehavior.DoNothing
                ? numUpdate + numAdd
                : numUpdate + numNotMatched + numAdd;

            using (var db = new postgresContext())
            {
                var numRowsAffected = await db.Efcoretest
                                      .Where(e => e.Name.Contains(nameof(BulkMergeTests)))
                                      .BulkMergeAsync(
                    toMerge,
                    notMatchedBehavior: notMatchedBehavior,
                    whenNotMatched: () => new Efcoretest {
                    Name = $"{nameof(BulkMergeTests)}__Archived__"
                });

                Assert.Equal(expectedRecordsAffected, numRowsAffected);

                var dbCount = await db.Efcoretest
                              .Where(e => e.Name.Contains(nameof(BulkMergeTests)))
                              .CountAsync();

                if (notMatchedBehavior == BulkMergeNotMatchedBehavior.Delete)
                {
                    Assert.Equal(toMerge.Count, dbCount);
                }
                else
                {
                    Assert.NotEqual(toMerge.Count, dbCount);
                }

                foreach (var m in toMerge)
                {
                    var dbEntity = await db.Efcoretest.FindAsync(m.Id);

                    Assert.NotNull(dbEntity);
                    Assert.Equal(m.Name, dbEntity.Name);
                    Assert.Equal(m.Modifieddate.ToString("d"), dbEntity.Modifieddate.ToString("d"));
                    Assert.Equal(m.Createddate.ToString("d"), dbEntity.Createddate.ToString("d"));
                }

                var dontDeleteEntity = await db.Efcoretest.FindAsync(dontDelete.Id);

                Assert.NotNull(dontDeleteEntity);
            }
        }