codefirst updatebase

本文介绍了在CodeFirst模式下,当实体类发生变化时如何自动更新数据库的方法。通过设置Entity Framework的相关参数,如安装EntityFramework包、配置数据库连接字符串、启用迁移等步骤,最终执行Update-Database命令来实现数据库的自动同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.youkuaiyun.com/dj2008/article/details/23756895

http://blog.youkuaiyun.com/gentle_wolf/article/details/14004345

 http://blog.youkuaiyun.com/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.cs,AutomaticMigrationsEnabled默认为 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很重要,记录的是从创建数据库开始的全部更新的记录,所以在你没有绝对把握的情况下千万别动它。 

转载于:https://www.cnblogs.com/kexb/p/4858148.html

### C# Entity Framework Code First 使用教程 #### 安装 Entity Framework 要使用 Entity Framework (EF),首先需要将其安装到项目中。可以通过 NuGet 包管理器来完成此操作。具体方法如下: 1. 打开 Visual Studio 的 **工具** 菜单,选择 **NuGet 包管理器** -> **包管理器控制台**。 2. 输入命令 `Install-Package EntityFramework` 来安装最新版本的 EF。 这一步骤确保了项目的依赖项已正确配置[^3]。 --- #### 创建模型 在 Code First 方法中,数据库结构由代码中的类定义决定。例如,可以创建一个简单的实体类表示一张表: ```csharp public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } } ``` 上述代码片段展示了如何通过定义属性来自动生成对应的数据库列[^2]。 --- #### 配置 DbContext DbContext 是 EF 中的核心组件之一,用于管理和跟踪实体对象的状态以及与数据库交互。下面是一个示例实现: ```csharp using System.Data.Entity; public class ApplicationDbContext : DbContext { public DbSet<Product> Products { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // 可在此处添加额外的配置逻辑 } } ``` 在这里,`DbSet<T>` 表示对应于数据库表的集合类型。 --- #### 数据库初始化与迁移 为了使 Code First 自动生成并更新数据库模式,需启用迁移功能。以下是步骤概述: 1. 在包管理器控制台运行命令 `Enable-Migrations` 启用迁移支持。 2. 运行 `Add-Migration InitialCreate` 命令以生成初始迁移脚本。 3. 应用迁移至目标数据库:`Update-Database`。 如果发现某些表未能成功生成,则可能是由于未正确应用迁移或缺少必要的初始化设置。 --- #### 插入和查询数据 一旦完成了上下文和模型的设计,就可以轻松地执行 CRUD 操作。以下是一些基础示例: ##### 插入记录 ```csharp var product = new Product { Name = "Laptop", Price = 999 }; using (var context = new ApplicationDbContext()) { context.Products.Add(product); context.SaveChanges(); } ``` ##### 查询记录 ```csharp using (var context = new ApplicationDbContext()) { var products = context.Products.Where(p => p.Price > 500).ToList(); foreach (var item in products) { Console.WriteLine($"{item.Name} costs ${item.Price}"); } } ``` 这些代码片段分别演示了如何新增一条产品信息以及筛选价格高于指定值的产品列表[^1]。 --- ### 常见问题及其解决方案 1. **为什么我的数据库中没有任何表格?** 如果在运行程序后仍然看不到预期的表,可能的原因包括但不限于: - 忘记调用了 `context.Database.Initialize(true)` 或者启用了自动迁移; - 实体类未被注册到 `DbContext` 中; - 数据源连接字符串错误导致实际作用的是另一个空白数据库实例。 2. **怎样更改默认数据库提供程序为 PostgreSQL?** 默认情况下,Code First 将尝试连接 SQL Server Express。 若要切换为目标兼容其他 RDBMS(如 PostgreSQL),则需要调整应用程序配置文件 (`App.config`) 并引入相应的驱动程序。例如,Npgsql 提供了一个官方插件可用于处理此类场景。 3. **性能优化建议有哪些?** 当面对大规模的数据集时,考虑采用懒加载、显式加载或者贪婪加载策略;另外还可以利用索引提高检索效率,并减少不必要的往返通信次数。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值