使用Code First模式开发如何更新数据库(转载)

原文:

http://blog.bossma.cn/csharp/code-first-how-to-upgrade-database/

Code First模式

使用Code First模式开发数据库时,首先编写实体类,继承DbContext创建数据操作类,然后在这个基础上编写自己的业务处理程序,然后在系统运行前配置数据连接,当系统第一次运行时会自动创建数据库(当前版本中使用DropCreateDatabaseIfModelChanges策略时,系统第一次运行时如果数据库已经存在则会抛出异常,所以这个数据库是自动创建的),并根据实体类自动创建相应的数据表。

这种开发模式很好的体现了领域驱动设计的思想,特别适合业务系统的开发工作,好处很多,我就不多说了。

测试数据问题

但是对开发工作同样存在一些问题,比如修改实体类以后,数据库会重新创建,我们输入的测试数据会全部丢失,这样会导致一定的效率问题。对于这个问题官方提供了解决的办法:通过接口IDatabaseInitializer,实现自己的数据库初始化策略,当数据库重建后可以编写程序(Seed方法中)向数据表中插入特定的测试数据。

系统上线以后

但是系统上线以后,就不能这样搞了,真实的业务数据怎么能重新创建出来?如下是我的解决办法:

1、修改数据库初始化策略,使用CreateDatabaseIfNotExists(如果数据库不存在则创建数据库),这样当业务实体类修改后,数据库就不会自动重建了,数据自然保存下来;

2、去数据库中修改实体类对应的相关数据表,保证实体类属性与对应的数据表的字段保持一致。

这样在系统已经上线后,如果业务实体有变化,比如增加个属性之类的,两边(实体类和数据表)都修改下就好了;仔细考虑下应该先修改数据库,然后上传新的程序,保证程序运行的时候不会出现数据库映射问题。

EdmMetadata

在创建数据库时会自动创建一个表EdmMetadata,这个表用于比对模型与当前数据库是否匹配,如果实体发生变化,这个表里边的值就会和模型中计算出来的值不一致,从而实施数据库重建操作。但是如果使用CreateDatabaseIfNotExists策略,这个表就没什么用了,可以安全的删除掉。

进一步考虑

我们可以将这个系统中创建的数据表放到一个已经存在的数据库中,只需要修改数据连接属性即可。比如一个大的系统下有很多小的子系统,这些小的子系统对应的数据表都在这个大的数据库中,而每个子系统具体的开发模式可能不同,使用Code First模式开发的系统就可以按照上边的策略进行部署和更新维护。

时间: 2024-11-08 23:19:13

使用Code First模式开发如何更新数据库(转载)的相关文章

基于现有数据库的Code First模式迁移更新数据库

本文讨论的内容是基于EF4.1版本.文中谈论的现有的数据库不是由EF创建.本文假定你已经对Code First迁移有一定的了解,如果不了解Code First迁移更新数据库可以查看 文章涉及的主题如下: 1.创建模型 2.可迁移性 3.添加一个初始迁移 a.使用现有的schema作为起点 b.以一个空数据库作为起点 4.注意点: a.默认的/计算的名称可能与现有schema不匹配 b.不是所有的数据库对象都在model中表现出来 一.创建模型 第一步是创建一个以现有数据库为目标的Code Fir

EF6 Code First 模式更新数据库架构

定义好实体类和上下文类 在 Package Manager Console 输入以下命令 1.Enable-Migrations 启用数据迁移功能,该命令通常会在项目根目录下生成 Migrations 文件夹,文件夹内通常会有两个文件 201408020650593_InitialCreate.cs -- 迁移前的数据结构,前半段为时间戳 Configuration.cs -- 相关配置,是否需要自动迁移等,默认为 false 2.Add-Migration 增加迁移点,输入该命令后会要求你输入

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

我对 CodeFirst 的理解,与之对应的有 ModelFirst与 DatabaseFirst ,三者各有千秋,依项目实际情况自行选择. 1.开发过程中先行设计数据库并依此在项目中生成 *.dbml 或是 *.edmx 文件的,就是DatabaseFirst: 2.开发时先建立空的 *.edmx 文件,由此文件生成数据库的,就是ModelFirst: 3.使用 System.Data.Entity. DbContext 与 System.Data.Entity. DbSet构建数据模型,没有

Entity Framework应用:使用Code First模式管理数据库创建和填充种子数据

一.管理数据库连接 1.使用配置文件管理连接之约定 在数据库上下文类中,如果我们只继承了无参数的DbContext,并且在配置文件中创建了和数据库上下文类同名的连接字符串,那么EF会使用该连接字符串自动计算出数据库的位置和数据库名.比如,我们的数据库上下文定义如下: 1 using System; 2 using System.Collections.Generic; 3 using System.Data.Entity; 4 using System.Linq; 5 using System.

支持“***Context”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。

在用VS进行MVC开发的过程中遇到如下问题: 支持“***Context”上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269). 解决了,把数据库中检测模型变化的表(如上图所示)删除就可以了

EF core (code first) 通过自定义 Migration History 实现多租户使用同一数据库时更新数据库结构

前言 写这篇文章的原因,其实由于我写EF core 实现多租户的时候,遇到的问题. 具体文章的链接: Asp.net core下利用EF core实现从数据实现多租户(1) Asp.net core下利用EF core实现从数据实现多租户(2) : 按表分离   (主要关联文章) 这里我遇到的最主要问题是:由于多租户的表使用的是同一个数据库.由于这个原因,无法通过 Database.EnsureCreated() 自动创建多个结构相同但名字不同的表. 所以我在文中提到,需要自己跑脚本去创建多有的

Code First 迁移更新数据库

在使用 Code First 方式进行MVC程序设计中,更新数据库操作记录: 1.修改需要更新的Model,如: 在Company中增加一个列名,如下: 修改后将应用程序重新编译,然后选择工具>库程序包管理器>程序包管理控制台,如图:打开控制台,输入enable-migrations -force ,然后回车 运行后在项目项目资源管理器中会出现Migrations文件夹,打开Configuration.cs 文件,将AutomaticMigrationsEnabled 值改为 true.然后在

C# 使用Code First迁移更新数据库

三步完成迁移: 1. 启用迁移: Enable-Migrations Enable-Migrations -ContextTypeName Mvc4WebSite.Models.MvcGuestbookContext 迁移 Mvc4WebSite项目下的MvcGuestbookContext.迁移成功提示:已为项目 Mvc4WebSite 启用 Code First 迁移. 2. 添加迁移: Add-Migration Add-Migration InitialCreate 3. 将迁移更新到数

Code First 更新数据库结构

参考:http://blog.csdn.net/sxycxwb/article/details/12186159 0.删除之前的数据库 1.Run the Enable-Migrations command in Package Manager Console 进入(PM)软件包管理控制台 (视图——>其他窗口——>程序包管理控制台)输入以下指令:Enable-Migrations 会提示:"No context type was found in the assembly"