DotNetCore中使用EF下Migration


  以前使用db.Database.EnsureCreatedAsync()創建數據庫,這樣創建的數據庫無法更新,無法遷移,當數據庫作出修改后就會因為兼容舊版而束手無策,只能重新錄入數據。基於這種需求,研究了EF提供的Migrations功能。

  vs版本:2015,.NetCore版本:1.0.1。

  新建項目ConsoleApp1。

  想要使用Migrations,需先安裝EF命令行工具:Microsoft.EntityFrameworkCore.Tools,不知道什么時候,此包被包含到“Microsoft.EntityFrameworkCore.Tools.DotNet”中:

"tools": {
    "Microsoft.EntityFrameworkCore.Tools.DotNet": {
      "version": "1.0.0-preview3-final"
    }

注:經調查,此包版本須為“1.0.0-preview3-final”,否則各種失敗。

  其他需要引用的包有:

    "Microsoft.EntityFrameworkCore.Design": {
      "version": "1.0.1",
      "type": "build"
    },
    "System.Reflection.TypeExtensions": "4.3.0-*",
    "Microsoft.EntityFrameworkCore": "1.0.1-*",

注:Microsoft.EntityFrameworkCore.Design的版本不可低於1.0.0-preview3-final,不可高於1.0.1。

  接下來可以安裝工具了,在ConsoleApp1解決方案根目錄使用命令:

dotnet restore
cd src\\ConsoleApp1
dotnet ef

  成功后命令行顯示:

  此時已可使用EF命令行了。

  現在創建Model:

    public class Blog
    {
        public virtual int Id { get; set; }

        public virtual string Name { get; set; }

        public virtual string Url { get; set; }
    }

    public class Post
    {
        public virtual int Id { get; set; }

        public virtual string Title { get; set; }

        public virtual string Content { get; set; }

        public virtual int BlogId { get; set; }

        public virtual Blog Blog { get; set; }
    }

  創建數據上下文:

  public class EFCoreContext : DbContext
    {public DbSet<Blog> Blog { get; set; }

        public DbSet<Post> Post { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlite("data source=consoledemo.sdb");
        }
    }

  在工程所在目錄使用命令:

  此時輸出目錄中已生成了數據庫文件,並自動創建了兩個表Blog和Post。

  添加數據:

                var blog = new Blog
                {
                    Id = 11,
                    Name = "myblog",
                    Url = "http://www.cnblogs.com/automan-wei/"
                };

                db.Blog.Add(blog);
                db.SaveChanges();    

  顯然是成功的。

  現在使用數據庫遷移。

  修改Blog類,添加一個屬性:

  public class Blog
    {
        public virtual int Id { get; set; }

        public virtual string Name { get; set; }

        public virtual string Url { get; set; }

        public virtual string Auther { get; set; }
    }

  需要先添加一個遷移,再更新數據庫:

  可以看到,項目中已多出一個遷移文件:

  數據庫也已被更新:

  關於EF7的數據庫遷移功能,暫時就到這兒了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM