实验环境是VS 2015、MSSQL Server 2008、windows 10

一、创建项目

  通过VS创建一个MVC5项目EntityFrameworkExtension

二、安装Entity Framework

  通过nuget添加Entity Framework到项目,当前版本为6.2.0

三、创建实体类Student  

  1. public class Student
  2. {
  3. public string Id { get; set; }
  4. public string Name { get; set; }
  5. public int Age { get; set; }
  6.  
  7. }

四、添加数据库连接和上下文

  在web.config中添加数据库链接

  1. <connectionStrings>
  2. <add name="EfDefault" connectionString="Server=.;Database=CodeFirstApp;Integrated Security=SSPI" providerName="System.Data.SqlClient"/>
  3. </connectionStrings>

  创建上下文EfContext

  1. public class EfContext : DbContext
  2. {
  3. public EfContext():base("name=EfDefault")
  4. {
  5.  
  6. }
  7.  
  8. private DbSet<Student> Students { get; set; }
  9. }

  在这里,DbContext是所有基于EF的上下文基类,通过它可以访问到数据库中的所有表。上面的代码中调用了父类的构造函数,并且传入了一个键值对,键是name,值是FirstCodeFirstApp

五、启用迁移

  在程序包管理器控制台用命令进行开启迁移

  1. PM> Enable-Migrations

  a.指定DbContext: Enable-Migrations -ContextTypeName XXXXContext

  b.指定项目名称:      Enable-Migrations -StartUpProjectName XXX -Force

  将自动生成迁移文件夹Migrations和Configuration.cs

  1. namespace EntityFrameworkExtension.Migrations
  2. {
  3. using System;
  4. using System.Data.Entity;
  5. using System.Data.Entity.Migrations;
  6. using System.Linq;
  7.  
  8. internal sealed class Configuration : DbMigrationsConfiguration<EntityFrameworkExtension.Entities.EfContext>
  9. {
  10. public Configuration()
  11. {
  12. AutomaticMigrationsEnabled = false;
  13. }
  14.  
  15. protected override void Seed(EntityFrameworkExtension.Entities.EfContext context)
  16. {
  17. // This method will be called after migrating to the latest version.
  18.  
  19. // You can use the DbSet<T>.AddOrUpdate() helper extension method
  20. // to avoid creating duplicate seed data.
  21. }
  22. }
  23. }

  这时自动迁移是被关闭的,需要手动迁移

  1. PM> add-migration InitDb

  将自动在Migrations生成迁移代码文件xxxx_迁移名称.cs,如201804160820076_InitDb.cs

  使用命令进行手动迁移

  1. PM> update-database -verbose

  verbose可以查看命令的执行过程

  1. Using StartUp project 'EntityFrameworkExtension'.
  2. Using NuGet project 'EntityFrameworkExtension'.
  3. Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
  4. Target database is: 'CodeFirstApp' (DataSource: ., Provider: System.Data.SqlClient, Origin: Configuration).
  5. Applying explicit migrations: [201804160820076_InitDb].
  6. Applying explicit migration: 201804160820076_InitDb.
  7. CREATE TABLE [dbo].[Students] (
  8. [Id] [nvarchar]() NOT NULL,
  9. [Name] [nvarchar](max),
  10. [Age] [int] NOT NULL,
  11. CONSTRAINT [PK_dbo.Students] PRIMARY KEY ([Id])
  12. )
  13. CREATE TABLE [dbo].[__MigrationHistory] (
  14. [MigrationId] [nvarchar]() NOT NULL,
  15. [ContextKey] [nvarchar]() NOT NULL,
  16. [Model] [varbinary](max) NOT NULL,
  17. [ProductVersion] [nvarchar]() NOT NULL,
  18. CONSTRAINT [PK_dbo.__MigrationHistory] PRIMARY KEY ([MigrationId], [ContextKey])
  19. )
  20. INSERT [dbo].[__MigrationHistory]([MigrationId], [ContextKey], [Model], [ProductVersion])
  21. VALUES (N'201804160820076_InitDb', N'EntityFrameworkExtension.Migrations.Configuration', 此处省略 , N'6.2.0-61023')
  22.  
  23. Running Seed method.

然后刷新数据库即可看到创建的表,其中__MigrationHistory是EF自动生成的迁移日志表

六、生成指定版本的迁移脚本

  1. PM> Update-Database -SourceMigration 201806190702572_XX1 -TargetMigration 201806200143418_XX2 -Script

生成迁移脚本时产生错误:
  未能找到任何适合于指定的区域性或非特定区域性的资源。请确保在编译时已将“MMIS.Data.Migrations.AlterReceive.resources”正确嵌入或链接到程序集“MMIS.Data”,或者确保所有需要的附属程序集都可加载并已进行了完全签名。

原因:

  Migrations迁移文件夹下的每个迁移文件包含xxxx.cs、xxxx.Designer.cs、xxxx.resx,而其中.resx文件由于svn的原因而被隐藏导致的

迁移问题总结

一、当前库的数据库表结构已被更改为最新,出现未迁移提醒的问题。

  可能的起因:两个人都提交了迁移文件,进行一次update-database,引起迁移冲突

  解决:

  删除迁移表的本次迁移记录(多条),删除迁移文件(多个)。

  重新使用Add-Migration AddNewTest生成迁移文件,注释掉迁移文件内容,进行update-database -verbose

参考文章:http://www.cnblogs.com/farb/p/FirstCodeFirstApp.html

EF Codefirst入门之创建数据库的更多相关文章

  1. MVC CodeFirst简单的创建数据库(非常详细的步骤)

       最近在学习MVC的开发,相信有过开发经验的人初学一个新的框架时候的想法跟我一样最关心的就是这个框架如何架构,每个架构如何分工,以及最最关键的就是如何与数据库通信,再下来才是学习基础的页面设计啊等 ...

  2. EF Code-First 学习之旅 数据库初始化 (二)

    Context类的基类构造函数有如下的参数 1.无参数 如果没有给基类构造函数添加参数,它会在local SQLEXPRESS server创建数据库,名为{Namespace}.{Context c ...

  3. Hibernate入门之创建数据库表

    前言 Hibernate 5.1和更早版本至少需要Java 1.6和JDBC 4.0,Hibernate 5.2和更高版本至少需要Java 1.8和JDBC 4.2,从本节开始我们正式进入Hibern ...

  4. C# CodeFirst(EF框架)代码优先创建数据库

    namespace WebEF.Model{ public class ModelContext:DbContext //继承DBcontext 来自EF框架 { public ModelContex ...

  5. 2、Entity Framework Core 3.1入门教程-创建数据库和迁移

    本文章是根据 微软MVP solenovex(杨旭)老师的视频教程编写而来,再加上自己的一些理解. 视频教程地址:https://www.bilibili.com/video/BV1xa4y1v7rR ...

  6. EF CodeFirst使用Nuget更新数据库

    常用命令: 1.开启迁移 Enable-Migrations -EnableAutomaticMigrations 2.添加一条迁移记录 Add-Migration AddMigration001 3 ...

  7. EF Code-First 学习之旅 数据库初始化

    1.CreateDatabaseIfNotExists: 2.DropCreateDatabaseIfModelChanges: 3.DropCreateDatabaseAlways: 4.Custo ...

  8. 七:mvc使用CodeFirst(代码优先)创建数据库

    1. 理解EF CodeFirst模式特点 2. 使用CodeFirst模式生成数据库 1. CodeFirst模式(代码优先) Code First是Entity Framework提供的一种新的编 ...

  9. (17)ASP.NET Core EF基于数据模型创建数据库

    1.简介 使用Entity Framework Core构建执行基本数据访问的ASP.NET Core MVC应用程序.使用迁移(Migrations)基于数据模型创建数据库,你可以在Windows上 ...

随机推荐

  1. 编写高质量Python代码总结:待完成

    1:字符串格式化 #避免%过多影响阅读 print('hello %(name)s'%{'name':'tom'}) #format方法print('{name} is very {emmition} ...

  2. 观察者模式--java

    写在前面 钩子函数.注册函数.回调函数,他们的概念其实是一样的. 观察者模式,又可以称之为发布-订阅模式,观察者,顾名思义,就是一个监听者,类似监听器的存在,一旦被观察/监听的目标发生的情况,就会被监 ...

  3. C++引用以及定义常见问题总结

    最近在做数据结构的实验,暴露了一些典型问题,这里总结一下,避免以后出错 编译时报一个特别长的错:“无法解析的外部符号”,行号还是1,应该看一下定义的成员函数有没有还没有实现就被调用的,实验接口普遍挺多 ...

  4. js中文编码到C#后台解码

    escape() 方法: 采用ISO Latin字符集对指定的字符串进行编码.所有的空格符.标点符号.特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编 ...

  5. Linux文件权限设置

    基本概念 https://linux.cn/article-7418-1.html#3_8880 用户管理 文件权限设置 -添加用户账户08% -理解 /etc/passwd 中的内容12% -理解 ...

  6. ubuntu安装matplotlib一些坑

    ubuntu16.04,python2.7 安装matplotlib, 1.在root权限下执行命令 pip install matplotlib==1.5.1 这里有个困扰我一个星期的问题,系统都被 ...

  7. Linux静默安装matlab

    对linux系统不是很熟,所有装起来有点费劲.来来回回折腾了二三天,查了很多攻略,但按照步骤老是报错,大体上各人设备不同.系统不同.环境设置不同,总是会多多少少略有差异. 一 基本配置 linux系统 ...

  8. Docker 更改默认存储目录 - 十一

    Cemtos 7 Docker 默认目录是 /var/lib/docker docker info 查看 docker 配置信息 更改 docker 默认目录 :  编辑 启动文件: 编辑 /usr/ ...

  9. CSS面试复习(二):CSS的使用

    一.CSS基础 1.选择器 选择器{ 属性:值: 属性:值 } 作用:用于匹配HTML元素.分类和权重.解析方式和性能.值得关注的选择器 分类: 元素选择器a{} 伪元素选择器::before{} 类 ...

  10. MacOS下安装小米SQL优化工具soar

    1 下载源码包 赋予权限 wget https://github.com/XiaoMi/soar/releases/download/0.11.0/soar.darwin-amd64 -O soar ...