Exemplo n.º 1
0
        public void BatchInsert()
        {
            using var split = CreateForBatch("BatchInsert");

            var list = new List <Role2>
            {
                new Role2 {
                    Name = "管理员"
                },
                new Role2 {
                    Name = "高级用户"
                },
                new Role2 {
                    Name = "普通用户"
                }
            };
            var rs = list.BatchInsert();

            Assert.Equal(list.Count, rs);

            var list2 = Role2.FindAll();

            Assert.Equal(list.Count, list2.Count);
            Assert.Contains(list2, e => e.Name == "管理员");
            Assert.Contains(list2, e => e.Name == "高级用户");
            Assert.Contains(list2, e => e.Name == "普通用户");
        }
Exemplo n.º 2
0
        public void RWTest()
        {
            // 准备连接字符串。故意放到不同库上
            DAL.AddConnStr("rw_test", "Data Source=data\\rw_test.db", null, "SQLite");
            DAL.AddConnStr("rw_test.readonly", "Data Source=data\\rw_test_readonly.db", null, "SQLite");

            // 反向工程建表
            var d1 = DAL.Create("rw_test");
            var d2 = DAL.Create("rw_test.readonly");

            Role2.Meta.ConnName = "rw_test";
            d1.SetTables(Role2.Meta.Table.DataTable);
            d2.SetTables(Role2.Meta.Table.DataTable);

            var n1 = Role2.Meta.Count;

            var name = Rand.NextString(8);

            XTrace.WriteLine("开始RWTest name={0}", name);

            // 先删掉原来可能有的
            var r0 = Role2.FindByName(name);

            r0?.Delete();

            // 主库插入数据
            XTrace.WriteLine("主库插入数据");
            var r = new Role2();

            r.Name = name;
            r.Insert();

            // 如果查询落在从库,不可能查到。因为这个测试用例故意分开为不同的库
            XTrace.WriteLine("从库查一下");
            var r2 = Role2.Find(Role2._.Name == name);

            //XTrace.WriteLine("FindByName: {0}", r2.ToJson());
            Assert.Null(r2);

            // 更新数据,还在主库
            XTrace.WriteLine("再次更新主库");
            r.IsSystem = true;
            r.Update();

            // 再找一次,理论上还是没有
            XTrace.WriteLine("再找一次从库");
            var r3 = Role2.Find(Role2._.Name == name);

            //XTrace.WriteLine("Find: {0}", r3.ToJson());
            Assert.Null(r3);

            XTrace.WriteLine("删除数据");
            r.Delete();

            XTrace.WriteLine("查从库记录数");
            var n = Role2.FindCount();

            XTrace.WriteLine("count={0}", n);
        }
Exemplo n.º 3
0
        public void BatchReplace()
        {
            using var split = CreateForBatch("Replace");

            var list = new List <Role2>
            {
                new Role2 {
                    Name = "管理员", Remark = "guanliyuan"
                },
                new Role2 {
                    Name = "高级用户", Remark = "gaoji"
                },
                new Role2 {
                    Name = "普通用户", Remark = "putong"
                }
            };
            var rs = list.BatchInsert();

            Assert.Equal(list.Count, rs);

            var gly = list.FirstOrDefault(e => e.Name == "管理员");

            Assert.NotNull(gly);
            Assert.Equal("guanliyuan", gly.Remark);

            XTrace.WriteLine(Role2.FindAll().ToJson());

            list = new List <Role2>
            {
                new Role2 {
                    Name = "管理员"
                },
                new Role2 {
                    Name = "游客", Remark = "guest"
                },
            };
            rs = list.BatchReplace();
            // 删除一行,插入2行,但是影响行为2,这一点跟MySql不同
            Assert.Equal(2, rs);

            var list2 = Role2.FindAll();

            XTrace.WriteLine(list2.ToJson());
            Assert.Equal(4, list2.Count);
            Assert.Contains(list2, e => e.Name == "管理员");
            Assert.Contains(list2, e => e.Name == "高级用户");
            Assert.Contains(list2, e => e.Name == "普通用户");
            Assert.Contains(list2, e => e.Name == "游客");

            var gly2 = list2.FirstOrDefault(e => e.Name == "管理员");

            Assert.NotNull(gly2);
            Assert.Null(gly2.Remark);
            // 管理员被删除后重新插入,自增ID改变
            Assert.NotEqual(gly.ID, gly2.ID);
        }
        public async Task <ActionResult> Register(RegisterViewModel model)
        {
            var Recommend = Session["RecommendCode"] == null ? string.Empty : Session["RecommendCode"].ToString();

            ViewBag.Recommend = Recommend;


            model.Recommend = Recommend;
            model.UserCode  = new Anything.Helpers.BaseDLL().GetUserCode(model.UserName);

            model.UserType = "User";

            if (ModelState.IsValid)
            {
                var user = new ApplicationUser2 {
                    UserName = model.UserName, Email = model.Email, UserType = model.UserType, UserCode = model.UserCode, Recommend = model.Recommend
                };
                var result = await UserManager2.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    var roleName = model.UserType;
                    if (!RoleManager2.RoleExists(roleName))
                    {
                        var role = new Role2(roleName);
                        await RoleManager2.CreateAsync(role);
                    }



                    UserManager2.AddToRole(user.Id, model.UserType);

                    var code = await UserManager2.GenerateEmailConfirmationTokenAsync(user.Id);

                    var callbackUrl = Url.Action("ConfirmEmail", "AccountForUser", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);

                    var link = string.Format("信箱驗證連結網址<a href='{0}'>完成驗證</a>", callbackUrl);

                    await UserManager2.SendEmailAsync(user.Id, "MYAnything 信箱驗證", link);

                    ViewBag.Link = callbackUrl;
                    return(View("DisplayEmail"));
                }
                AddErrors(result);
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }
        public async Task <ActionResult> Join(RegisterViewModel model)
        {
            var Recommend = Session["RecommendCode"] == null ? string.Empty : Session["RecommendCode"].ToString();

            ViewBag.Recommend = Recommend;
            //AddRoles();
            //var Recommend = string.Empty;
            if (string.IsNullOrEmpty(model.Recommend))
            {
                model.Recommend = OfficalRecommendCode;
            }
            else
            {
                model.Recommend = GetRecommendUserCode(model.Recommend);
            }
            //model.Recommend = Recommend;
            model.UserCode = new Anything.Helpers.BaseDLL().GetUserCode(model.UserName);
            model.UserType = "User";
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser2 {
                    UserName = model.UserName, Email = model.Email, UserType = model.UserType, UserCode = model.UserCode, Recommend = model.Recommend
                };
                var result = await UserManager2.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    var roleName = model.UserType;
                    if (!RoleManager2.RoleExists(roleName))
                    {
                        var role = new Role2(roleName);
                        await RoleManager2.CreateAsync(role);
                    }

                    UserManager2.AddToRole(user.Id, model.UserType);
                    var code = await UserManager2.GenerateEmailConfirmationTokenAsync(user.Id);

                    var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                    await UserManager2.SendEmailAsync(user.Id, "MYAnything 信箱驗證", "Please confirm your account by clicking this link: <a href=\"" + callbackUrl + "\">link</a>");

                    ViewBag.Link = callbackUrl;
                    return(View("DisplayEmail"));
                }
                AddErrors(result);
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }