EF-使用迁移技术让程序自动更新数据库表结构

承接上一篇文章:关于类库中EntityFramework之CodeFirst(代码优先)的操作浅析

本篇讲述的是怎么使用迁移技术让程序自动通过ORM框架将模型实体类结构映射到现有数据库,并新增或修改与之对应的表结构。

无论承不承认,都要使用到visual studio的“程序包管理器控制台”执行相关的命令。

1、使用"程序包管理器控制台"

工具》NuGet程序包管理器》程序包管理器控制台

这货的界面是这样子的:

选中默认项目为DAL,因为我们在DAL项目安装了EntityFramework程序包。输入命令Enable-Migrations,大小写无所谓,都可以。该命令的意思是:激活迁移,也就是激活程序中的自动迁移技术。该命令只有在安装了EntityFramework程序包的项目中有效。如果没有成功安装EntityFramework程序包,使用不了该命令,会出错。

激活迁移成功的界面如下图:

当DAL项目的迁移被激活成功后,会在该项目下自动生成一个Migrations文件夹,里面包含一个密封的迁移配置类,还有一个使用当前时间生成的类(该类中包含修改前的数据库中已经存在的表结构)。

2、迁移配置

打开DAL项目中Migrations文件夹下的Configuration.cs文件。将Configuration类的构造函数改为如下代码:

        public Configuration() {
            //将AutomaticMigrationsEnabled设置true,表示启用自动迁移技术
            AutomaticMigrationsEnabled = true;
            //将AutomaticMigrationDataLossAllowed设置为true,表示在更新数据表结构时,允许丢失数据
            AutomaticMigrationDataLossAllowed = true;
            ContextKey = "DAL.DemoContext";
        }

如果该Configuration与应用程序不是在同一程序集,则需要将该Configuration类的访问修饰符从internal改为public。这样,在应用程序中才能使用该Configuration类。

3、使用迁移

在控制台应用程序的Main方法中,加上Database.SetInitializer(new MigrateDatabaseToLatestVersion<DemoContext, DAL.Migrations.Configuration>())。如下图所示:

接下来运行程序。程序成功运行后,让我们来对比一下结果。

数据表结构更新前:

数据表结构更新后:

使用程序自动更新表结构成功!

4、模型类属性的特性约束

看一下上面的表结构,Name和Address的最大长度为max。

我们能否自定义一个最大的字符串长度呢?当然可以!

能否自动更新到表结构呢?你当我上面的那一篇幅文章是白讲的吗!!!

更新Model层的Student类,给某些字段添加特性约束。属性的特性约束,不仅在程序中可以使用,也能自动更新到数据库。如下代码:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Model {
    //指定表名
    [Table("Student")]
    public class Student {
        //指定该表的主键
        [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid ID { get; set; }

        [MaxLength(50,ErrorMessage ="姓名的最大长度为50个字符")]
        public string Name { get; set; }

        [Range(typeof(DateTime),"1900-01-01","2017-07-01")]
        public DateTime? BirthDay { get; set; }

        [Range(1,150,ErrorMessage ="年龄范围在1~150岁之间")]
        public int? Age { get; set; }

        [MaxLength(100,ErrorMessage ="地址的最大长度为100个字符")]
        public string Address { get; set; }
    }
}

运行程序后,我们看一下数据库中的表结构:

已经成功更新了Student表结构。

惊不惊喜?

意不意外?

高不高兴?

开不开心?

在CodeFirst模式中,我们没有动过数据库一个代码,完全靠的是ORM框架去映射实体模型和数据库。只在程序代码中动动手指头,就能轻轻松松的调用数据库,使用数据。

时间: 2024-12-20 10:17:12

EF-使用迁移技术让程序自动更新数据库表结构的相关文章

自动获取数据库表结构

Python 将sandman包中的自动获取数据库表结构的部分提取出来 包名auto_get_database __init__.py from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__) db = SQLAlchemy(app) models.py from decimal import Decimal from flask import current_app fro

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 clas

【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档

对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL(MySQL数据库表结构导出器). 介绍: DBExportDoc V1.0 For MySQL是一款利用office特性VBA开发的小工具,利用此工具可以将本机MySQL上任意数据库.任意表的数据结构导出.但是它不是一款你安装是一路next到finish就可以立刻使用的. 要注意的有两点: 首先,你

EF修改model自动更新数据库

最近用MVC+EF学习时遇到修改model后而数据库没更新报错,就在网上找关于数据迁移自动更新数据库的,折腾了大半天终于弄了出来 第一步:在程序包管理器控制台里: Enable-Migrations -ProjectName EF所在的项目名称 第二步:运行后会在字段生成Migrations文件夹,Migrations->Configuration.cs 类里把AutomaticMigrationsEnabled改为true(即设为model有改动自动更新数据库) 如有删除字段则要加 Autom

如何让程序自动更新

如何让程序自动更新 自动更新的软件的目的在于让客户不在为了寻找最新软件花费时间.也不用去到开发商的网站上查找.客户端的软件自动会在程序启动前查找服务器上最新的版本.和自己当前软件的版本比较,如果服务器的是最新版本.客户端则进行自动下载.解压.安装.当然了下载是要有网络的,并且用户可以根据提示去完成操作.再也不用为找不到最新版本的软件而头疼.下面是我的大体思路,已经得到了实现: 1.  写一个webservice,提供一个获取服务器xml中版本的数据的方法.(也可用其他文件格式, 此处举例XML)

sqlite自动更新数据库

写一个类继承自  SQLiteOpenHelper 系统会自动添加构造方法. onCreate方法.onUpgrade方法 当数据库里面数据或者表结构有所改动时,咱们需要升级数据库 这个时候,版本加1.在update里面做相应修改. 需要注意的是,如果需要测试update,每次开始测试,version 值增大,如果和上次的相同,就不会促发update方法了 下面贴上代码 先是原来的表结构,对应的代码 import android.content.Context; import android.d

Code First 下自动更新数据库结构(Automatic Migrations)

示例 Web.config <?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramew

hibernate 自动生成数据库表

只要在hibernate.cfg.xml添加这句话,就可以自动生成数据表 <property name="hibernate.hbm2ddl.auto">update</property> update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表:如果表里缺少列,则自动添加列. 还有其他的参数: create:启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后的以前数据都会丢失.

Hibernate自动生成数据库表

在hibernate.cfg.xml中添加: 引用 <properties> <property name="hibernate.hbm2ddl.auto" value="create" /> </properties> value的值可选项如下: 引用 validate  加载hibernate时,验证创建数据库表结构 create  每次加载hibernate,重新创建数据库表结构. create-drop  加载hibern