美高梅在线登录网址EF下批量翻新数占有未有更加快的秘籍啊~

新近用ABP框架做项目,其卷入了EF来落实其储存,蒙受必要批量写入数据的作业,不过平常未有发觉批量立异的主意,只可以做三个循环来更新数据。做了八个2002条的立异测量试验,耗费时间居然高达24秒。。将测量检验放到10000条竟然耗费时间超越10分钟,到底是EF品质降低,也许是ABP框架的主题素材,依然本身的架势不对,求大佬解除疑难。另求科学的批量立异数据库的方式!其余,Insert10000条耗费时间1.4秒。。数据库为SQLServer二零一二

     }

那风度翩翩节我们说说数据库迁移(Migration)。

咱俩后面用的DBFirst创建了实体类,但那个时候那样做的缘故是为着节省时间。今后大家经过创办的实体类和DbContext类利用EF的Code First数据库迁移反过来创设数据库。ABP模板默许开启了搬迁,而且增加了一下下边包车型地铁Configuration类:

namespace Noah.ChargeStation.Migrations
{
    internal sealed class Configuration : DbMigrationsConfiguration<ChargeStation.EntityFramework.ChargeStationDbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
            ContextKey = "ChargeStation";
        }
        /// <summary>
        /// 添加种子数据,比如默认管理员等数据
        /// </summary>
        /// <param name="context">当前数据库上下文子类</param>
        protected override void Seed(ChargeStation.EntityFramework.ChargeStationDbContext context)
        {
            context.DisableAllFilters();
            new InitialDataBuilder(context).Build();
        }
    }
}

namespace Noah.ChargeStation.Migrations.SeedData
{
    public class DefaultTenantRoleAndUserBuilder
    {
        private readonly ChargeStationDbContext _context;

        public DefaultTenantRoleAndUserBuilder(ChargeStationDbContext context)
        {
            _context = context;
        }

        public void Build()
        {
            CreateUserAndRoles();
        }

        private void CreateUserAndRoles()
        {
            //Admin role for tenancy owner

            var adminRoleForTenancyOwner = _context.Roles.FirstOrDefault(r => r.TenantId == null && r.Name == "Admin");
            if (adminRoleForTenancyOwner == null)
            {
                adminRoleForTenancyOwner = _context.Roles.Add(new Role { Name = "Admin", DisplayName = "Admin", IsStatic = true });
                _context.SaveChanges();
            }

            //Admin user for tenancy owner

            var adminUserForTenancyOwner = _context.Users.FirstOrDefault(u => u.TenantId == null && u.UserName == "admin");
            if (adminUserForTenancyOwner == null)
            {
                adminUserForTenancyOwner = _context.Users.Add(
                    new User
                    {
                        TenantId = null,
                        UserName = "admin",
                        Name = "System",
                        Surname = "Administrator",
                        EmailAddress = "admin@aspnetboilerplate.com",
                        IsEmailConfirmed = true,
                        Password = "AM4OLBpptxBYmM79lGOX9egzZk3vIQU3d/gFCJzaBjAPXzYIK3tQ2N7X4fcrHtElTw==" //123qwe
                    });

                _context.SaveChanges();

                _context.UserRoles.Add(new UserRole(adminUserForTenancyOwner.Id, adminRoleForTenancyOwner.Id));

                _context.SaveChanges();
            }

            //Default tenant

            var defaultTenant = _context.Tenants.FirstOrDefault(t => t.TenancyName == "Default");
            if (defaultTenant == null)
            {
                defaultTenant = _context.Tenants.Add(new Tenant { TenancyName = "Default", Name = "Default" });
                _context.SaveChanges();
            }

            //Admin role for 'Default' tenant

            var adminRoleForDefaultTenant = _context.Roles.FirstOrDefault(r => r.TenantId == defaultTenant.Id && r.Name == "Admin");
            if (adminRoleForDefaultTenant == null)
            {
                adminRoleForDefaultTenant = _context.Roles.Add(new Role { TenantId = defaultTenant.Id, Name = "Admin", DisplayName = "Admin", IsStatic = true });
                _context.SaveChanges();
            }

            //Admin for 'Default' tenant

            var adminUserForDefaultTenant = _context.Users.FirstOrDefault(u => u.TenantId == defaultTenant.Id && u.UserName == "admin");
            if (adminUserForDefaultTenant == null)
            {
                adminUserForDefaultTenant = _context.Users.Add(
                    new User
                    {
                        TenantId = defaultTenant.Id,
                        UserName = "admin",
                        Name = "System",
                        Surname = "Administrator",
                        EmailAddress = "admin@aspnetboilerplate.com",
                        IsEmailConfirmed = true,
                        Password = "AM4OLBpptxBYmM79lGOX9egzZk3vIQU3d/gFCJzaBjAPXzYIK3tQ2N7X4fcrHtElTw==" //123qwe
                    });
                _context.SaveChanges();

                _context.UserRoles.Add(new UserRole(adminUserForDefaultTenant.Id, adminRoleForDefaultTenant.Id));
                _context.SaveChanges();
            }
        }
    }
}

在Seed方法中,增多了租户,剧中人物和客商数据。今后,笔者来创立初阶化迁移。张开包微型机调整台,输入下边包车型客车命令:

美高梅4858官方网站 1

此地非常注意,灰白方框中无庸置疑不忘了选取EF项目,不然不会有上面现身的下令“Add-Migration”,”InitialData”是调换文书的后缀名(也是文件中类的名字),也足以取别的名字。

美高梅4858官方网站 2

美高梅4858官方网站 3

能够观察变化的文书叁个以cs结尾,那之中的代码是创办数据库中表的,另四个以Designer.cs结尾,记录的是数据库迁移的本子记录,最后三个以.resx文件是财富文件,临时不必要构思。

刚刚大家只是创建了创办数据库所急需的类,但还不曾开创数据库。为了创造数据库,要求在包管控台试行以下命令:

PM> Update-Database

 

该命令达成了这一次数据库的动迁,创造了数据库并填写了种子数据。

美高梅4858官方网站 4

美高梅4858官方网站,当咱们转移实体类时,能够运用Add-Migration命令创立新的迁移类和Update-Database命令更新数据库。

由来,数据库迁移完结。下一遍我们说说《定义仓库储存》。

美高梅4858官方网站 5

6.接下来正是比较繁琐的SQL Server脚本转MySQL脚本了,小编利用NotePad++,做了频仍的批量沟通,把剧本调换到MySQL帮忙的内容。


1.从美高梅在线登录网址,官网下载ABP项目模板,并解压到地面,用VS展开,这里我们新建五个品种ConnectMySql。

www.4688.com,回来总目录《一步一步使用ABP框架搭建正式项目种类教程》

……

2.设置XXX.Web为运转项目,Build那么些Solution,使得NuGet下载相关的包。

<add name="Default" providerName="MySql.Data.MySqlClient" connectionString="server=localhost;port=3306;database=test;uid=root;password=xxx" />

3.备选好八个SQL Server数据库,改革Web.config数据库的ConnectionString,连接收SQL Server数据库。

8.大家回来VS,为XXX.EntityFramework和XXX.Web,通过Nuget加多MySql.Data.Entity:

9.张开Web项指标Web.config,由于上一步增多了MySql.Data.Entity,所以Web.config已经增加了MySql的相干配置。大家只供给改革连接字符串,注释掉SQL Server的字符串,加多新的总是字符串:

13.大家编写翻译一下以此Solution,然后在Package Manager Console窗口中,输入命令Add-Migration AddStudent,这里的AddStudent是对我们本次退换的叁个下令。命令运维成功后,在Migrations文件夹中,会创立进级数据库的C#代码。

选取ABP+EF+SQL Server是相比较推荐的三结合,可是既然大家接受的是EF,那么就应有是和数据库分离的,也就代表大家应有可以采取任何的数据库,举个例子MySQL。