Asp.net Core 2.0+EntityFrameWorkCore 2.0添加資料移轉

來源:互聯網
上載者:User

Core
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執行,逐步執行,發現,只有在程式啟動並執行時候,才會添加 種子 測試資料到資料庫。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.