首页 > 数据库技术 > 详细

MVC Code First 当实体类发生变化时,如何自动更新数据库表

时间:2016-08-05 00:40:51      阅读:365      评论:0      收藏:0      [点我收藏+]

下面做一个例子,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; }
    }
}

 然后运行下程序就更新了数据库中的表了。

MVC Code First 当实体类发生变化时,如何自动更新数据库表

原文:http://www.cnblogs.com/LoveQin/p/5738914.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!