Пример #1
0
        public static async Task DeleteAsync()
        {
            LogNewLine();

            using (_operLogger.BeginScope("{BatchId}", "DeleteAsync"))
            {
                var tasks = new List <Task>();

                var batchSw = LogStarted();
                var operSw  = Stopwatch.StartNew();

                using (var ctx = new BloggingContext(_dbCtxOpts))
                {
                    ctx.SetDapperMapping <User>();
                }

                LogElapsed(operSw, "set mapping");

                tasks.Add(Task.Run(async() =>
                {
                    using (_operLogger.BeginScope("{OperId}", ".Delete1"))
                    {
                        var sw = LogStarted();
                        int res;

                        using (var ctx = new BloggingContext(_dbCtxOpts))
                        {
                            var id = 320;
                            res    = await ctx.DeleteAsync <User>(o => o.Id >= id).ConfigureAwait(false);
                        }

                        LogElapsed(sw, "ended", $"res = {res}");
                    }
                }));

                tasks.Add(Task.Run(async() =>
                {
                    using (_operLogger.BeginScope("{OperId}", ".Delete2 (all)"))
                    {
                        var sw = LogStarted();
                        int res;

                        using (var ctx = new BloggingContext(_dbCtxOpts))
                        {
                            res = await ctx.DeleteAllAsync <BlogPost>().ConfigureAwait(false);
                        }

                        LogElapsed(sw, "ended", $"res = {res}");
                    }
                }));

                await Task.WhenAll(tasks).ConfigureAwait(false);

                LogElapsed(batchSw, "ended");
            }
        }
Пример #2
0
        public static async Task SelectAsync()
        {
            LogNewLine();

            using (_operLogger.BeginScope("{BatchId}", "SelectAsync"))
            {
                var tasks = new List <Task>();

                var batchSw = LogStarted();
                var operSw  = Stopwatch.StartNew();

                using (var ctx = new BloggingContext(_dbCtxOpts))
                {
                    ctx.SetDapperMapping <User>();
                }

                LogElapsed(operSw, "set mapping");

                tasks.Add(Task.Run(async() =>
                {
                    using (_operLogger.BeginScope("{OperId}", ".Select1"))
                    {
                        var sw    = LogStarted();
                        int count = 0;

                        using (var ctx = new BloggingContext(_dbCtxOpts))
                        {
                            var stateSw = Stopwatch.StartNew();
                            var q       = ctx.Users.Where(o => o.Id > 1 && o.Name1 == "User Insert2").OrderBy(x => x.Id).ThenByDescending(x => x.Name1).Take(2);
                            LogElapsed(stateSw, "created query");
                            count = (await ctx.QueryAsync(q).ConfigureAwait(false)).Count();
                        }

                        LogElapsed(sw, "ended", $"count = {count}");
                    }
                }));

                tasks.Add(Task.Run(async() =>
                {
                    using (_operLogger.BeginScope("{OperId}", ".Select2 (with selector)"))
                    {
                        var sw    = LogStarted();
                        int count = 0;

                        using (var ctx = new BloggingContext(_dbCtxOpts))
                        {
                            var stateSw = Stopwatch.StartNew();
                            var q       = ctx.Users.Where(o => o.Id > 1).OrderBy(x => x.Id).ThenByDescending(x => x.Name1).Take(2).Select(x => new { x.Id, Name = x.Name1 });
                            LogElapsed(stateSw, "created query");
                            count = (await ctx.QueryAsync(q).ConfigureAwait(false)).Count();
                        }

                        LogElapsed(sw, "ended", $"count = {count}");
                    }
                }));

                tasks.Add(Task.Run(async() =>
                {
                    using (_operLogger.BeginScope("{OperId}", ".Select3"))
                    {
                        var sw    = LogStarted();
                        int count = 0;

                        using (var ctx = new BloggingContext(_dbCtxOpts))
                        {
                            var stateSw = Stopwatch.StartNew();
                            var q       = ctx.Users.Where(o => o.Id > 1 && o.Name1 == "User Insert2").OrderBy(x => x.Id).ThenByDescending(x => x.Name1).Take(2);
                            LogElapsed(stateSw, "created query");
                            count = (await ctx.QueryAsync(q).ConfigureAwait(false)).Count();
                        }

                        LogElapsed(sw, "ended", $"count = {count}");
                    }
                }));

                tasks.Add(Task.Run(async() =>
                {
                    using (_operLogger.BeginScope("{OperId}", ".Select4 (with selector)"))
                    {
                        var sw    = LogStarted();
                        int count = 0;

                        using (var ctx = new BloggingContext(_dbCtxOpts))
                        {
                            var stateSw = Stopwatch.StartNew();
                            var q       = ctx.Users.Where(o => o.Id > 1).OrderBy(x => x.Id).ThenByDescending(x => x.Name1).Take(2).Select(x => new { x.Id, Name = x.Name1 });
                            LogElapsed(stateSw, "created query");
                            var res = (await ctx.QueryAsync(q).ConfigureAwait(false)).Count();
                        }

                        LogElapsed(sw, "ended", $"count = {count}");
                    }
                }));

                await Task.WhenAll(tasks).ConfigureAwait(false);

                LogElapsed(batchSw, "ended");
            }
        }
Пример #3
0
        public static void SelectSync()
        {
            LogNewLine();

            using (_operLogger.BeginScope("{BatchId}", "SelectSync"))
            {
                var batchSw = LogStarted();
                var operSw  = new Stopwatch();

                using (_operLogger.BeginScope("{OperId}", ".Warmup"))
                {
                    LogStarted(operSw);

                    //warmup
                    using (var ctx = new BloggingContext(_dbCtxOpts))
                    {
                        ctx.SetDapperMapping <User>();
                        var q      = ctx.Users.Where(o => o.Id > 1 && o.Name1 == "User Insert2").OrderBy(x => x.Id).ThenByDescending(x => x.Name1).Take(2);
                        var result = ctx.Query(q);
                    }

                    LogElapsed(operSw, "ended", "ignore timing");
                }

                LogNewLine();
                batchSw.Restart();
                operSw.Restart();

                using (var ctx = new BloggingContext(_dbCtxOpts))
                {
                    LogElapsed(operSw, "created context");

                    using (_operLogger.BeginScope("{OperId}", ".Select1"))
                    {
                        LogStarted(operSw);

                        var q   = ctx.Users.Where(o => o.Id > 1 && o.Name1 == "User Insert2").OrderBy(x => x.Id).ThenByDescending(x => x.Name1).Take(2);
                        var res = ctx.Query(q);

                        LogElapsed(operSw, "ended", $"count = {res.Count()}");
                    }

                    LogNewLine();

                    using (_operLogger.BeginScope("{OperId}", ".Select12 (with selector)"))
                    {
                        LogStarted(operSw);

                        var q   = ctx.Users.Where(o => o.Id > 1).OrderBy(x => x.Id).ThenByDescending(x => x.Name1).Take(2).Select(x => new { x.Id, Name = x.Name1 });
                        var res = ctx.Query(q);

                        LogElapsed(operSw, "ended", $"count = {res.Count()}");
                    }

                    LogNewLine();

                    using (_operLogger.BeginScope("{OperId}", ".Select13"))
                    {
                        LogStarted(operSw);

                        var q   = ctx.Users.Where(o => o.Id > 1 && o.Name1 == "User Insert2").OrderBy(x => x.Id).ThenByDescending(x => x.Name1).Take(2);
                        var res = ctx.Query(q);

                        LogElapsed(operSw, "ended", $"count = {res.Count()}");
                    }

                    LogNewLine();

                    using (_operLogger.BeginScope("{OperId}", ".Select14 (with selector)"))
                    {
                        LogStarted(operSw);

                        var q   = ctx.Users.Where(o => o.Id > 1).OrderBy(x => x.Id).ThenByDescending(x => x.Name1).Take(2).Select(x => new { x.Id, Name = x.Name1 });
                        var res = ctx.Query(q);

                        LogElapsed(operSw, "ended", $"count = {res.Count()}");
                    }

                    operSw.Restart();
                }

                LogElapsed(operSw, "disposed context");
                LogElapsed(batchSw, "ended");
            }
        }
Пример #4
0
        public static void Select()
        {
            var q1 = EF.CompileQuery(
                (BloggingContext ctx) =>
                ctx.Users.Where(o => o.Id > 1 && o.Name1 == "User Insert2")
                .OrderBy(x => x.Id).ThenByDescending(x => x.Name1).Take(2));

            LogNewLine();

            using (_operLogger.BeginScope("{BatchId}", "Select"))
            {
                var batchSW = LogStarted();

                using (var ctx = new BloggingContext(_dbCtxOpts))
                {
                    ctx.SetDapperMapping <User>();
                    var operSW = new Stopwatch();

                    using (_operLogger.BeginScope("{OperId}", ".Select1a (compiled)"))
                    {
                        LogStarted(operSW);

                        var res = q1(ctx);

                        LogElapsed(operSW, "ended", $"count = {res.Count()}");
                    }

                    LogNewLine();

                    using (_operLogger.BeginScope("{OperId}", ".Select1"))
                    {
                        LogStarted(operSW);

                        var q = ctx.Users.Where(o => o.Id > 1 && o.Name1 == "User Insert2")
                                .OrderBy(x => x.Id).ThenByDescending(x => x.Name1).Take(2);
                        var res = ctx.Query(q);

                        LogElapsed(operSW, "ended", $"count = {res.Count()}");
                    }

                    LogNewLine();

                    using (_operLogger.BeginScope("{OperId}", ".Select2 (with selector)"))
                    {
                        LogStarted(operSW);

                        var q = ctx.Users.Where(o => o.Id > 1).OrderBy(x => x.Id).ThenByDescending(x => x.Name1)
                                .Take(2).Select(x => new { x.Id, Name = x.Name1 });
                        var res = ctx.Query(q);

                        LogElapsed(operSW, "ended", $"count = {res.Count()}");
                    }

                    LogNewLine();

                    using (_operLogger.BeginScope("{OperId}", ".Select3"))
                    {
                        LogStarted(operSW);

                        var q = ctx.Blogs.Where(b => b.Name == "Blog2").Join(ctx.Users, o => o.UserId, i => i.Id,
                                                                             (o, i) => new { Blog = o, User = i });

                        var res = ctx.Query(q, (Blog b, User u) =>
                        {
                            b.User = u;
                            return(new { Blog = b, User = u });
                        });

                        LogElapsed(operSW, "ended", $"count = {res.Count()}");
                    }

                    var stateSw = new Stopwatch();

                    using (_operLogger.BeginScope("{OperId}", ".Select4"))
                    {
                        LogNewLine();
                        LogStarted(operSW);

                        stateSw.Restart();

                        var q = from u in ctx.Users
                                join b in ctx.Blogs on u.Id equals b.UserId into bg
                                from b in bg.DefaultIfEmpty()
                                join p in ctx.BlogPosts on b.Id equals p.BlogId into pg
                                from p in pg.DefaultIfEmpty()
                                where u.Id == 2
                                select new
                        {
                            User = u,
                            Blog = b,
                            Post = p
                        };

                        LogElapsed(stateSw, "created query");

                        var res = ctx.Query(q, (User u, Blog b, BlogPost p) =>
                        {
                            b.User = u;

                            if (p != null)
                            {
                                p.Blog = b;
                            }

                            return(new
                            {
                                User = u,
                                Blog = b,
                                Post = p
                            });
                        });

                        stateSw.Restart();

                        var users = res.GroupBy(ug => ug.User.Id, (key, uItems) =>
                        {
                            var item        = uItems.First();
                            item.User.Blogs = uItems.GroupBy(bg => bg.Blog?.Id, (bid, bItems) =>
                            {
                                var bitem = bItems.FirstOrDefault();
                                if (bitem == null)
                                {
                                    return(null);
                                }
                                bitem.Blog.BlogPosts = bItems.Select(x => x.Post).
                                                       Where(x => x != null).ToArray();
                                return(bitem.Blog);
                            }).Where(x => x != null).ToArray();
                            return(item.User);
                        }).ToArray();

                        LogElapsed(stateSw, "processed result");
                        LogElapsed(operSW, "ended", $"count = {res.Count()}");
                    }
                }

                LogElapsed(batchSW, "ended");
            }
        }
Пример #5
0
        public static async Task UpdateAsync()
        {
            LogNewLine();

            using (_operLogger.BeginScope("{BatchId}", "UpdateAsync"))
            {
                var tasks = new List <Task>();

                var batchSw = LogStarted();
                var operSw  = Stopwatch.StartNew();

                using (var ctx = new BloggingContext(_dbCtxOpts))
                {
                    ctx.SetDapperMapping <User>();
                }

                LogElapsed(operSw, "set mapping");

                tasks.Add(Task.Run(async() =>
                {
                    using (_operLogger.BeginScope("{OperId}", ".Update1"))
                    {
                        var sw = LogStarted();
                        int res;

                        using (var ctx = new BloggingContext(_dbCtxOpts))
                        {
                            var obj = new
                            {
                                Gender = Gender.Male,
                                Id     = 2,
                                Name1  = "test2"
                            };

                            var id   = 3;
                            var name = "teste";
                            res      = await ctx.UpdateAsync <User>(obj, x => x.Id == id && x.Name1 == name).ConfigureAwait(false);
                        }

                        LogElapsed(sw, "ended", $"res = {res}");
                    }
                }));

                tasks.Add(Task.Run(async() =>
                {
                    using (_operLogger.BeginScope("{OperId}", ".Update2"))
                    {
                        var sw = LogStarted();
                        int res;

                        using (var ctx = new BloggingContext(_dbCtxOpts))
                        {
                            var obj = new
                            {
                                Gender = Gender.Male,
                                Id     = 2,
                                Name1  = "teste"
                            };

                            var id   = 3;
                            var name = "test2";
                            res      = await ctx.UpdateAsync <User>(obj, x => x.Id == id && x.Name1 == name).ConfigureAwait(false);
                        }

                        LogElapsed(sw, "ended", $"res = {res}");
                    }
                }));

                tasks.Add(Task.Run(async() =>
                {
                    using (_operLogger.BeginScope("{OperId}", ".Update3 (bulk)"))
                    {
                        var sw = LogStarted();
                        int res;

                        using (var ctx = new BloggingContext(_dbCtxOpts))
                        {
                            var objs = new[]
                            {
                                new
                                {
                                    Gender = Gender.Male,
                                    Id     = 8,
                                    Name1  = "User Insert83"
                                },
                                new
                                {
                                    Gender = Gender.Female,
                                    Id     = 9,
                                    Name1  = "User Insert93"
                                },
                                new
                                {
                                    Gender = Gender.Female,
                                    Id     = 10,
                                    Name1  = "User Insert103"
                                }
                            };

                            res = await ctx.UpdateAsync <User>(objs, 2);
                        }

                        LogElapsed(sw, "ended", $"res = {res}");
                    }
                }));

                await Task.WhenAll(tasks).ConfigureAwait(false);

                LogElapsed(batchSw, "ended");
            }
        }
Пример #6
0
        public static async Task InsertAsync()
        {
            LogNewLine();

            using (_operLogger.BeginScope("{BatchId}", "InsertAsync"))
            {
                var tasks = new List <Task>();

                var batchSw = LogStarted();
                var operSw  = Stopwatch.StartNew();

                using (var ctx = new BloggingContext(_dbCtxOpts))
                {
                    ctx.SetDapperMapping <User>();
                }

                LogElapsed(operSw, "set mapping");

                tasks.Add(Task.Run(async() =>
                {
                    using (_operLogger.BeginScope("{OperId}", ".Insert1"))
                    {
                        var sw = LogStarted();
                        decimal?res;

                        using (var ctx = new BloggingContext(_dbCtxOpts))
                        {
                            var u = new User
                            {
                                Name1      = "User Insert 123",
                                DateCreate = DateTime.Now,
                                Gender     = Gender.Female,
                                Id         = 3
                            };

                            res = await ctx.InsertAsync <User>(u).ConfigureAwait(false);
                        }

                        LogElapsed(sw, "ended", $"res = {res}");
                    }
                }));

                tasks.Add(Task.Run(async() =>
                {
                    using (_operLogger.BeginScope("{OperId}", ".Insert2"))
                    {
                        var sw = LogStarted();
                        int res;

                        using (var ctx = new BloggingContext(_dbCtxOpts))
                        {
                            var dt = DateTime.Now;

                            var objs = new[]
                            {
                                new {
                                    Name1      = "User Insert 123",
                                    DateCreate = dt,
                                    Gender     = Gender.Female
                                },
                                new {
                                    Name1      = "User Insert 234",
                                    DateCreate = dt,
                                    Gender     = Gender.Male
                                },
                                new {
                                    Name1      = "User Insert 345",
                                    DateCreate = dt,
                                    Gender     = Gender.Female
                                },
                            };

                            res = await ctx.InsertAsync <User>(objs, 2).ConfigureAwait(false);
                        }

                        LogElapsed(sw, "ended", $"res = {res}");
                    }
                }));

                await Task.WhenAll(tasks).ConfigureAwait(false);

                LogElapsed(batchSw, "ended");
            }
        }