使用CodeFirst创建数据库

CodeFirst的意思是根据EF实体类创建对应的数据结构,创建过程由DotNet框架自己完成,程序员可以部分干涉。

1.CodeFirst数据库策略

CreateDatabaseIfNotExists:默认的策略:如果数据库不存在,那么就创建数据库。但是如果数据库存在了,而且实体发生了变化,就会出现异常。

DropCreateDatabaseIfModelChanges:此策略表明:如果模型变化了,数据库就会被重新创建,原来的数据库被删除掉了。

DropCreateDatabaseAlways:此策略表示:每次运行程序都会重新创建数据库,这在开发和调试的时候非常有用。

2.使用EF读取数据时创建数据

步骤如下:

1)创建项目

2)添加EF实体类

3)添加DbContext派生类

首先要引入EntityFramework程序包,可以使用NuGet控制台命令:Install-Package EntityFramework -Version 5.0.0。

然后定义派生类,可以在构造函数或者app.config/web.config中定义数据库策略。

构造函数定义:

 1 public class BloggingContext : DbContext
 2 {
 3         public BloggingContext()
 4             : base("TestEFConnection")
 5         {
 6             //代码优先数据库策略
 7             //默认的策略:如果数据库不存在,那么就创建数据库。但是如果数据库存在了,而且实体发生了变化,就会出现异常。
 8             Database.SetInitializer(new CreateDatabaseIfNotExists<BloggingContext>());
 9         }
10
11         public DbSet<Blog> Blogs { get; set; }
12         public DbSet<Post> Posts { get; set; }
13 }

Web.config定义:

添加到appSettings节点

<add key="DatabaseInitializerForType Ebuy.Website.Models.EbuyDataContext,Ebuy.Website"          value="System.Data.Entity.CreateDatabaseIfNotExists`1[[TestEF.TestCodeFirst.BloggingContext,TestEF.TestCodeFirst]],EntityFramework" />

TestEF.TestCodeFirst.BloggingContext:表示完整的类名称,TestEF.TestCodeFirst:表示类所在程序集

注意:以上两种选择其一即可!

        禁止数据库策略:

<add key="DatabaseInitializerForType TestEF.TestCodeFirst.BloggingContext, TestEF.TestCodeFirst" value="Disabled" />

此配置将禁止应用CodeFirst创建数据库!

4)读取数据(创建数据库)

运行程序使用EF上下文(DbContext派生类),读取或者写入数据到实体对象,提交数据后EF会根据数据库策略删除或创建数据库。

注意:最好明确指定数据库连接名称(DbContext派生类构造函数中指定),否则因各自安装数据库组件的不同,可能得到的并不是预期效果。

官方说法是:

如果本地 SQL Express 实例可用(默认情况下随 Visual Studio 2010 安装),则 Code First 对该实例创建数据库

如果 SQL Express 不可用,则 Code First 将尝试使用LocalDb(默认情况下随 Visual Studio 2012 安装)创建数据库

3.使用Migration相关命令主动迁移数据

CodeFirst模式默认使用CreateDatabaseIfNotExists策略,因此开发过程中常常遇到”数据结构已更改,需要更新数据”的错误提示,这时候就要使用Code First迁移。

迁移命令以下部分组成:

Enable-Migrations:启动CodeFirst数据迁移,第一次迁移会创建Migrations文件夹,包括:Configuration.cs,<时间戳>_InitialCreate.cs(当前数据库不存在时,不会创建此文件)。

Add-Migration:命令检查自上次迁移后是否有更改,并使用所有更改搭建新迁移,可以为迁移指定名称。

Update-Database:此命令将所有挂起的迁移应用于数据库

1)已有当前数据库

使用上面介绍的步骤创建数据库后,CodeFirst会在当前数据库__MigrationHistory表中添加迁移记录,如:

使用Enable-Migrations命令初始化CodeFirst时,将在项目文件夹Migrations中创建MigrationId对应的文件。

如果实体模型改变了,那么使用Add-Migration [迁移文件名] 命令可以生成待迁移文件,最后使用Update-Database命令提交改变。

2)没有当前数据库

》执行Entity-Migrations,创建Migrations文件夹(只包括Configuration.cs)

》执行Add-Migration [迁移文件名]

》执行Update-Database创建数据库

》查询数据库:select * from __MigrationHistory,会发现迁移记录,MigrationId就是项目中对应的迁移文件名。

引用:https://msdn.microsoft.com/zh-cn/data/jj193542

时间: 2024-12-17 14:11:28

使用CodeFirst创建数据库的相关文章

EF框架之CodeFirst创建数据库

CodeFirst是Entity Framework4.1后新增的一种生成模式,在这种方式下,你不需要在DBMS中创建数据库,也无需在VS中画实体模型了,你要做的仅仅是写写代码即可由ORM框架自动创建模型和数据库,非常的方便和简单(由于开发人员只是编写代码,不关心数据库的具体结构,因此也有人把这种方式叫做CodeOnly的). 下面就以一个简单的例子演示一下如何使用CodeFirst生成数据库. 一.新建一个项目并添加必要的引用. 二.编写代码. 1在项目中添加两个实体类和一个数据上下文类如下图

NetCore2.0下使用EF CodeFirst创建数据库

本文所使用的VS版本:VS2017 15.3.0 首先新建一个.net core项目  取名NetCoreTask 使用模型视图控制器方式 新建Model层 在Model层下新建一个user实体类 1 namespace XX.Model 2 { 3 public class tb_User 4 { 5 public string ID { get; set; } 6 public string UserName { get; set; } 7 public DateTime CreateTim

.net core2.0 codefirst 创建数据库的问题!

appsettings.json和Startup.cs就不记录了,网上很多!! 1.必须在有DbContext类的项目里添加这3个NuGet引用 Microsoft.EntityFrameworkCore.SqlServer Microsoft.EntityFrameworkCore.Tools Microsoft.VisualStudio.Web.CodeGeneration.Design 2.生成Migrations 工具->NuGet管理包->NuGet命令行    然后执行 PM>

EF CodeFirst 如何通过配置自动创建数据库&lt;当模型改变时&gt;

最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    本篇为进阶篇,也是弥补自己之前没搞明白的地方,惭愧惭愧. 如有不明白,请参考:EF CodeFirst 创建数据库 及 EF CodeFirst增删改查之'CRUD' 话不多说,直接上代码: using System; using System.Collections.Generic; using System.Linq; using System

【无私分享:ASP.NET CORE 项目实战(第四章)】Code First 创建数据库和数据表

目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 本章我们来介绍下Asp.net Core 使用 CodeFirst 创建数据库和表,通过 控制台 和 dotnet ef 两种方式 修改EF上下文对象,添加测试类 我修改了一下名字,Domains 改为了 wkmvc.Data 我们新建一个文件夹 Models 用于存放 模型类 我们在Models下面再新建一个文件夹SysModelsMange 用于区域模型类 我们新建一个测试类SYS_USER namespace wkm

【无私分享:ASP.NET CORE 项目实战(第五章)】Code First 创建数据库和数据表

目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 本章我们来介绍下Asp.net Core 使用 CodeFirst 创建数据库和表 修改EF上下文对象,添加测试类 我修改了一下名字,Domains 改为了 wkmvc.Data 我们新建一个文件夹 Models 用于存放 模型类 我们在Models下面再新建一个文件夹SysModelsMange 用于区域模型类 我们新建一个测试类SYS_USER namespace wkmvc.Data.Models  { public

使用CodeFirst创建并更新数据库

本文主要介绍如何使用CodeFirst模式来新建并更新数据库 在使用Entity Framwork的三种方式(ModelFist.DBFirst.CodeFirst)中,CodeFirst方式书写的代码最为干净. 至于CodeFist方式的详细优缺点请各位读者自行搜索,这里不多赘述. 1. 使用CodeFirst方式创建数据库 我们新建一个控制台项目,项目中添加两个Model:Author和Blog以及DbContext. DbContext的添加方式如下: 项目上右键->添加->新建项-&g

C# 之 EF CodeFirst创建MySQL数据库

MySQL安装好了,今天跟大家交流一下怎么利用EntityFramework的CodeFirst在MySQL数据库中创建数据库 目标框架:.NET Framework 4 第一步:新建一个项目,然后添加如下的引用,这些引用可以在NuGet中添加,也可以到官网中下载然后添加 第二步:在配置文件中添加数据库节点配置 <span style="font-family:Arial;font-size:10px;"><?xml version="1.0"?&

学习MVC之租房网站(三)-编写实体类并创建数据库

在上一篇<学习MVC之租房网站(二)-框架搭建及准备工作>中,搭建好了项目框架,并配置了EF.Log4Net和进程外Session.接下来会编写Eneity类并采用CodeFirst的方式创建数据库. 一.数据库表结构举例 1. 在按照CodeFirst方式编写Entity类之前,仍然是需要先搞清楚数据库的表结构.首先肯定会有用户.管理员.角色.权限等相关的表,然后针对租房的特殊场景,还有房屋.房屋家电配置.房子所在的地址包括城市和区域等. 2. 这里面有两张表比较特殊,T_Settings和