Code First Migrations更新数据库结构的具体步骤

2023-11-09

Code First Migrations更新数据库结构的具体步骤

作者寒羽枫(cityhunter172)

 http://blog.csdn.net/cityhunter172/article/details/8062420


我对 CodeFirst 的理解,与之对应的有 ModelFirst DatabaseFirst ,三者各有千秋,依项目实际情况自行选择。

1、开发过程中先行设计数据库并依此在项目中生成 *.dbml 或是 *.edmx 文件的,就是DatabaseFirst

2、开发时先建立空的 *.edmx 文件,由此文件生成数据库的,就是ModelFirst

 

3、使用 System.Data.Entity. DbContext  System.Data.Entity. DbSet构建数据模型,没有可视化文件,只有实体类的,就是CodeFirst

 

现在重点讲解在 CodeFirst 模式下,当你的实体类发生变化时,如何自动更新数据库以及遇到的各类问题。查阅相关资料,支持自动更新的变化有以下几种:

    a、增加属性或者类

    b、对属性和类重命名(想要使其正常工作,需要编写一些脚本)

    c、对列(column)或者表(table)重命名,而不对属性或类重命名

    d、删除属性

 

一、打开程序包管理器控制台

当你的实体模型与数据库架构不一致时,引发以下错误:
The model backingthe 'SchoolContext' context has changed since the database was created.Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269)
百度搜索Code First Migrations都说要执行命令 Update-Database ,在哪执行呢?继续找呀找,VS.NET的“程序包管理器控制台”出现了,但文章又没说在哪调出这个控制台。我也是初学者,找了半天终于知道它住哪了, “借问Console哪里有?牧童遥指视图中”。VS.NET →“视图”工具栏→其它窗口→程序包管理器控制台


二、安装EntityFramework

打开程序包管理器控制台,设置好包含实体模型的项目,执行 Update-Database如果你的项目只有一层,可能不会出现下列错误。我的测试项目把实体模型放在 Mvc4DAL,因此提示“未安装任何程序包。The EntityFramework package is not installed on project'Mvc4DAL'.  

1右击Mvc4DAL项目→管理NuGet程序包

 

 

2设置好程序包源

在界面中出现“未能解析此远程名称:’nuget.org’”字样,恭喜你,这步你不能跳过。点击左下方的“设置”按钮

右在设置窗口中新建一个程序包源,输入源的 URL http://157.56.8.150/api/v2/ 勾选启用,点击“确定”

  

3安装EntityFramework

选择刚刚新建的“程序包源”,在列表中找到EntityFramework,并安装
 

三、需要置好相关参数

1、设置好数据库连接字串

在项目中,找到 app.config(没有则在项目根目录手动新增,这里的设置只对本项目有效,不会影响到 Web 项目中的设置)。配置 <connectionStrings> 节点,新增 <addname="MyDBConnectString" providerName="System.Data.SqlClient"connectionString="datasource=.;initial catalog=MyDB;user id=sa;password=123456"/>Mvc4DAL 用的是名称 MyDBConnectString 的连接字串

publicclassSchoolContext : DbContext

{

publicSchoolContext() : base("MyDBConnectString")

若没有设置好连接字串,或是字串设置有误,将出现如下提示:
Anerror occurred while getting provider information from the database. This canbe caused by Entity Framework using an incorrect connection string. Check theinner exceptions for details and ensure that the connection string is correct.

  

2运行命令Enable-Migrations

出现如下提示时,你需要执行 Enable-Migrations
Nomigrations configuration type was found in the assembly 'Mvc4DAL'. (In VisualStudio you can use the Enable-Migrations command from Package Manager Consoleto add a migrations configuration).

打开程序包管理器控制台”,运行命令 Enable-Migrations Mvc4DAL项目中将出现Migrations文件夹与相应的文件 Configuration.cs

执行 Enable-Migrations 时可能会因为错误而打断,此时需要再次运行加参数的命令Enable-Migrations -Force
Migrationshave already been enabled in project 'Mvc4DAL'. To overwrite the existingmigrations configuration, use the -Force parameter.

注意“Enable-Migrations”中间没有空格,“-Force”前面必须要有空格。

 

3设置 AutomaticMigrationsEnabled true   

打开Migrations文件夹中的 Configuration.csAutomaticMigrationsEnabled默认为 false 改为 true就哦了否则将出现提示:
Unable to update database to match the current model because there arepending changes and automatic migration is disabled. Either write the pendingmodel changes to a code-based migration or enable automatic migration. SetDbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enableautomatic migration. You can use the Add-Migration command to write the pendingmodel changes to a code-based migration.

 

四、最后执行 Update-Database

上述步骤都设置好了,打开程序包管理器控制台”,运行命令 Update-Database,没有出错就大功成。这里要注意的是,数据库中有个名称为dbo.__MigrationHistory Table很重要,记录的是从创建数据库开始的全部更新的记录,所以在你没有绝对把握的情况下千万别动它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Code First Migrations更新数据库结构的具体步骤 的相关文章

随机推荐

  • flow对性能的影响

    不同高中低端ROUTER 其netflow处理性能果然相差很大低端10000f s是极限 中端40000f s 高端60000f s 且还有simpled这个杀手锏 低端ROUTER 2600 2800 3600 3700 来说 采集100
  • 使用Python爬取前程无忧上南京地区Python职位以及对应工资

    获取原始数据 最近在学习Python 做了一个爬虫程序练练手 前程无忧这个网站页面布局还是挺简单的 适合我这种新手 使用requests bs4爬取 不多说了 先来看看页面布局吧 这是前程无忧上的职位列表 看上去还是很清楚的 然后再来看看页
  • systemctl start network 启动网卡服务报错解决方法

    systemctl start network 启动网卡服务报错 root apache systemctl restart network Job for network service failed because the contro
  • Hibernate之查询中get()和load()的区别,list()和iterate()的区别

    Hibernate 之查询中get 和load 的区别 list 和iterate 的区别 list 查询 一次性把数据对象取出来 Test public void findTestList Session s sessionFactory
  • python3 面试题总结

    Python global 语句的作用 lambda 匿名函数好处 Python 错误处理 Python 内置错误类型 简述 any 和 all 方法 Python 中什么元素为假 提高 Python 运行效率的方法 Python 单例模式
  • LeetCode63. 不同路径 II

    不同路径 II 一个机器人位于一个 m x n 网格的左上角 起始点在下图中标记为 Start 机器人每次只能向下或者向右移动一步 机器人试图达到网格的右下角 在下图中标记为 Finish 现在考虑网格中有障碍物 那么从左上角到右下角将会有
  • Halcon三维模型预处理(1):调平的三大手法

    面结构光拍摄生成的点云模型 往往相对系统坐标系是有角度的 首先讲一下调平的目的 1 为接下来的预处理切除背景面做准备 3 不做调平 后续处理会很麻烦 因为不清楚坐标系在平台的为位置 2 对于无序抓取项目 平台相对相机可能是有角度的 将抓取平
  • socket和mongodb

    socket 创建一个socket 然后连接server url net Socket 发送信息给服务器 socket通信 client可以进行数据的编写和发送 服务器 只有一个 只有开启了服务器 客户端才能进行连接 mongodb 关系型
  • 归并排序(简单易懂的代码)

    归并排序是一种很重要的排序算法 体现的是分而治之的思想 很多的算法题的解法会借用这种算法思想 在这里使用C 编程实现归并排序 供自己回忆 供他人参考 include
  • 单元测试--重构

    一 单元测试 1 在没写函数内容代码前 就要写单元测试类 每个测试类中有TestSuite 2 如果写单元测试很困难 那么可能是你对要测试的函数不是很了解 如果不是则可能是设计的问题 也许要重构 二 重构1 不要存在代码重复的现象 若有 且
  • Android-布局管理器

    线性布局 Linearlayout 属性 orientation 布局管理器内组件的排列方式 horizontal 水平 和vertical 垂直 默认值为 horizontal layout weight 权重 用于设置组件占父容器剩余空
  • 网易云音乐播放器部分问题集

    这周在做网易云音乐播放器 这期间遇到了不少问题 下面就来记录一下我所遇到的部分问题 一 接口问题 调用网易云的接口 网上一搜方法一大堆 但是我的理解有些问题 硬生生搞了好久 下面就给那个方法再重新小白化一遍TAT 安装环境 首先你要有nod
  • FastAPI Web框架 [Pydantic]

    学习一下 做个记录 Starlette Pydantic 与 FastAPI 的关系 Python 的类型提示 type hints Pydantic 是一个基于 Python 类型提示来定义数据验证 序列化和文档 使用JSON 模式 库
  • 基于Arduino IDE 和ESP32-CAM 制作远程摄像头

    说明 具体教程及详细步骤参考 arduino esp32 cam环境配置和例程使用 在这里仅仅针对个人在开发过程中的一点经验及上文帖子没提到的一些部分做一个总结 因为我当初根据这个教程做的时候有以下几点是导致我一开始浪费了大量时间精力的 特
  • redis设计与实现读书笔记-主从复制

    主从复制 在Redis中 用户可以通过执行SLAVEOF命令或者设置slaveof选项 让一个服务器去复制 replicate 另一个服务器 我们称呼被复制的服务器为主服务器 master 而对主服务器进行复制的服务器则被称为从服务器 sl
  • git使用X篇_2_Git全套教程IDEA版(git、GitHub、Gitee码云、搭建公司内部GitLab、与IDEA集成等内容)

    本文是根据以下视频及网上总结进行更新后的介绍git使用的博文 包含了git GitHub Gitee码云 搭建公司内部GitLab 与IDEA集成等内容 笔记来源 尚硅谷 5h打通Git全套教程IDEA版 涵盖GitHub Gitee码云
  • 初识docker之如何运行一个容器

    手把手运行一个镜像 1 容器的特点2 启动容器的参数3 docker run d it name test p 900 8080 v opt usr local 78b258e36eed d 后台执行容器 it 保持stdin和为容器创建t
  • 一文搞懂Redis架构演化之路

    你好 我是 Kaito 这篇文章我想和你聊一聊 Redis 的架构演化之路 现如今 Redis 变得越来越流行 几乎在很多项目中都要被用到 不知道你在使用 Redis 时 有没有思考过 Redis 到底是如何稳定 高性能地提供服务的 我使用
  • Java Stream流处理Map 详细用法

    文章目录 Java Stream流处理Map 详细用法 实体类 Stream方法 Java Stream流处理Map 详细用法 实体类 package com jzj model 当前描述 author jiazijie since 202
  • Code First Migrations更新数据库结构的具体步骤

    Code First Migrations更新数据库结构的具体步骤 作者 寒羽枫 cityhunter172 http blog csdn net cityhunter172 article details 8062420 我对 CodeF