MVC Code First 當實體類發生變化時,如何自動更新數據庫表


下面做一個例子,Category是用戶新建的一個實體類,然后添加一個字段,然后讓數據庫中的Category表也添加一個字段

1.Category.cs

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;

namespace BlogAppDAL.Entities
{
    public class Category
    {
        public int Id { get; set; }
        [Required]
        [StringLength(200)]
        public string CategoryName { get; set; }

        //public DateTime CreateDate { get; set; }
        public virtual ICollection<Blog> Blogs { get; set; }
        public Category()
        {
            Blogs = new HashSet<Blog>();
        }
    }
}

開始了添加一個字段,代碼如下:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;

namespace BlogAppDAL.Entities
{
    public class Category
    {
        public int Id { get; set; }
        [Required]
        [StringLength(200)]
        public string CategoryName { get; set; }

        public DateTime CreateDate { get; set; }
        public virtual ICollection<Blog> Blogs { get; set; }
        public Category()
        {
            Blogs = new HashSet<Blog>();
        }
    }
}

在上下文當中寫入下面的代碼:

代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
using BlogAppDAL.Entities;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Data.Entity.Migrations;
using System.Data.Entity.Infrastructure;

namespace BlogAppDAL
{
    public class BlogAppContext : DbContext
    {
        public BlogAppContext()
            : base("name=BlogAppConn")
        {
            //自動創建表,如果Entity有改到就更新到表結構
            Database.SetInitializer<BlogAppContext>(new MigrateDatabaseToLatestVersion<BlogAppContext, ReportingDbMigrationsConfiguration>());
        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); //表名為類名,不是帶s的表名  //移除復數表名的契約
        }

        internal sealed class ReportingDbMigrationsConfiguration : DbMigrationsConfiguration<BlogAppContext>
        {
            public ReportingDbMigrationsConfiguration()
            {
                AutomaticMigrationsEnabled = true;//任何Model Class的修改將會直接更新DB
                AutomaticMigrationDataLossAllowed = true;
            }
        }
        
        public virtual DbSet<Blog> Blogs { get; set; }
        public virtual DbSet<Category> Categories { get; set; }
        public virtual DbSet<Comment> Comments { get; set; }
        public virtual DbSet<Role> Roles { get; set; }
        public virtual DbSet<User> Users { get; set; }
    }
}

 然后運行下程序就更新了數據庫中的表了。而且連Migrations文件夾都不需要了


免責聲明!

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



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