• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Asp.netCore2.0+EntityFrameWorkCore2.0添加数据迁移

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Asp.net Core 由于依赖注入的广泛使用,配置数据迁移,与Asp.net大不相同,本篇介绍一下Asp.net Core添加数据迁移的过程

添加Nuget包

Install-Package Microsoft.EntityFrameworkCore.SqlServer

Install-Package Microsoft.EntityFrameworkCore.Tools

Install-Package Microsoft.EntityFrameworkCore.Design

首先新建一个 Model 类 User:

public class User

    {

        //用户编号(自增长主键)

        [Key]

        public long UserId { get; set; }



        //用户名(必填项)

        [MaxLength(30),Required]

        public string UserName { get; set; }



        //密码(必填项)

        [MaxLength(16),DataType(DataType.Password),Required]

        public string Password { get; set; }

    }

然后建立MyDbContext类

   public class BlogDbContext:DbContext

    {

    //由于依赖注入的关系,不加构造函数这里会出现警告,但不影响数据迁移文件的建立,更新数据库也没影响

        public BlogDbContext(DbContextOptions<BlogDbContext> options):base(options)

        {

        }



        protected override void OnConfiguring(DbContextOptionsBuilder builder)

        {

            //添加数据库连接字符串

            builder.UseSqlServer(@"Server=.;User id=sa;Password=123;Database=BlogDbContext");

        }



        protected override void OnModelCreating(ModelBuilder builder)

        {

            base.OnModelCreating(builder);



            //添加FluentAPI配置

            var typesToRegister = Assembly.GetExecutingAssembly().GetTypes().Where(q => q.GetInterface(typeof(IEntityTypeConfiguration<>).FullName) != null);



            foreach(var type in typesToRegister)

            {

                dynamic configurationInstance = Activator.CreateInstance(type);

                builder.ApplyConfiguration(configurationInstance);

            }

        }

        //User相关表

        public DbSet<User> Users { get; set; }

    }
    

然后配置AppSetting.json,添加数据库连接字符串:

      "ConnectionStrings": {

        "DefaultConnection": "Server=.;User Id=sa;Password=123;Database=BlogDbContext;"

      },

在Startup.cs文件中注入数据库服务:

        public void ConfigureServices(IServiceCollection services)

        {

            services.AddDbContext<BlogDbContext>(options => 
                                                 options.UseSqlServer("DefaultConnection"));
            services.AddMvc();

        }

然后就可以进行数据迁移了,由于Asp .net Core 默认开启数据迁移,所以直接添加数据迁移就可以了

  Add-Migration Init

下面添加种子数据,这里不得不说踩过的一个大坑,添加种子数据的时候不仅与EF6.0 大不相同,跟EF Core1.X也大相径庭,也怪自己,不去看官方文档,非要去找教程(目前网上大部分教程都是1.x),哎,说多了都是泪。

有大佬指出,这里用的方法不是种子,去看了看官方文档,EF Core中并没有Seed方法,所以这里时添加测试数据,并不是种子。

添加一个初始化数据类,命名为SeedData.cs

 		public static class SeedData

        {

            /// <summary>

            /// 

            /// 配置测试数据

            /// 

            /// </summary>

            public static void Initialize(IServiceProvider app)

            {

                var _dbContext= app.GetRequiredService<BlogDbContext>();

                

                //如果已经有数据就直接返回

                if(_dbContext.Users.Any())

                {

                    return;

                }

                    //添加User测试数据

                    _dbContext.Users.Add(new User { UserName = "Niko", Password = "123" });

    

                    _dbContext.SaveChanges();

    

            }

        }

与EF Core 1.x不同的是,2.0是在Program.cs里的Main方法里(1.x是在Startup.cs中的Configure方法中)添加初始化方法。修改Main方法为:

			public static void Main(string[] args)

            {

                var host = BuildWebHost(args);

                using (var scope = host.Services.CreateScope())

                {

                    var services = scope.ServiceProvider;

                    try

                    {

                        SeedData.Initialize(services);

                    }

                    catch(Exception ex)

                    {

                        var logger = services.GetRequiredService<ILogger<Program>>();

                        logger.LogError(ex, "An error occurred seeding the DB");

                    }

                }

                    host.Run();

            }

接下来更新数据库

 Update-Database -Verbose

没有问题,去数据库里查看,添加的 种子数据 测试数据并没有加进来SQL Profile中并没有监测到添加数据操作。在Main方法加个断点,启动IIS执行,逐步执行,发现,只有在程序运行的时候,才会添加种子 测试数据到数据库。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NET菜鸟之路之Application小例子发布时间:2022-07-10
下一篇:
asp.netmvc之Url.Action()用法详解发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap