使用CodeFirst创建数据库_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 使用CodeFirst创建数据库

使用CodeFirst创建数据库

 2015/3/13 17:27:06  当悟  程序员俱乐部  我要评论(0)
  • 摘要:CodeFirst的意思是根据EF实体类创建对应的数据结构,创建过程由DotNet框架自己完成,程序员可以部分干涉。1.CodeFirst数据库策略CreateDatabaseIfNotExists:默认的策略:如果数据库不存在,那么就创建数据库。但是如果数据库存在了,而且实体发生了变化,就会出现异常。DropCreateDatabaseIfModelChanges:此策略表明:如果模型变化了,数据库就会被重新创建,原来的数据库被删除掉了。DropCreateDatabaseAlways
  • 标签:创建 使用code 使用 数据库 数据

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中定义数据库策略。

        构造函数定义:

class="code_img_closed" src="/Upload/Images/2015031317/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('5f12fa01-686e-487f-9d7e-8bab14e3c39a',event)" src="/Upload/Images/2015031317/2B1B950FA3DF188F.gif" alt="" />
 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 }
View Code

        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 

发表评论
用户名: 匿名