http://www.cnblogs.com/youfan/articles/3216816.html

我对 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很重要,记录的是从创建数据库开始的全部更新的记录,所以在你没有绝对把握的情况下千万别动它。

时间: 2024-12-14 18:47:09

http://www.cnblogs.com/youfan/articles/3216816.html的相关文章

Linux 上重启tomcat 【转】 http://www.cnblogs.com/tovep/articles/2473147.html

http://www.cnblogs.com/tovep/articles/2473147.html 在进行启动时报了权限不足的错误,使用sudo运行即可 [http://www.jb51.net/LINUXjishu/12713.html] Linux下Tomcat重新启动 在Linux系统下,重启Tomcat使用命令操作的! 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown.sh 查看Tomcat是否以关闭

sql之left join、right join、inner join的区别(转自:http://www.cnblogs.com/pcjim/articles/799302.html)

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只返回两个表中联结字段相等的行 举例如下: --------------------------------------------表A记录如下:aID aNum1 a200501112 a200501123 a200501134 a200501145 a20050115 表B记录如下:bID bNa

Python开发【第十七篇】:MySQL(一) http://www.cnblogs.com/wupeiqi/articles/5713315.html

http://www.cnblogs.com/wupeiqi/articles/5713315.html http://www.cnblogs.com/wupeiqi/articles/5713323.html http://www.cnblogs.com/wupeiqi/articles/5729934.html http://www.cnblogs.com/wupeiqi/articles/5716963.html 一.概述 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建

tuxedo10g3R的安装过程(原文url:http://www.cnblogs.com/xianfish/articles/1955244.html)

RHEL 5.1 32Bit 安装配置TUXEDO 10R3 [前言]: 目的: 在Linux上安装配置Tuxedo 10R3 环境: RHEL 5.1 32Bit [前提条件]: 下载Tuxedo 10R3. Oracle是一个很**的公司,很多其旗下旧版本一点软件,比如oracle 8i/9i,weblogic 8在其官网都已经无法下载,Tuxedo旧一点的也没了,10R3版本的目前为止还有,下面简单提供一下下载方法: 1.登陆:https://edelivery.oracle.com/EP

urllib 模块 https://www.cnblogs.com/guishou/articles/7089496.html

1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None) -         url:  需要打开的网址 -         data:Post提交的数据 -         timeout:设置网站的访问超时时间 直接用urllib.request模块的urlopen()获取页面,page的数据格式为bytes类型,需要

__bridge之谜转自(http://www.cnblogs.com/goodleixiao/articles/2517911.html)

__bridge只做类型转换,但是不修改对象(内存)管理权: __bridge_retained(也可以使用CFBridgingRetain)将Objective-C的对象转换为Core Foundation的对象,同时将对象(内存)的管理权交给我们,后续需要使用CFRelease或者相关方法来释放对象: __bridge_transfer(也可以使用CFBridgingRelease)将Core Foundation的对象转换为Objective-C的对象,同时将对象(内存)的管理权交给ARC

C#获取文件夹/文件的大小以及占用空间 转摘自:http://www.cnblogs.com/chenpeng-dota/articles/2176470.html

C#获取文件夹/文件的大小以及占用空间 今天,头给了个任务:写个方法,我会给你个路径,计算这个路径所占用的磁盘空间 . 然后,找了很多资料.但大部分都是获取文件夹/文件的大小的.对于占用空间的没有成品代码.(ps:我没找到.)后来,在网上找了些资料,自己捣鼓出来了.在这里记录下,一则说不定以后能用到.再则如果有高手有更好的方法或者建议,求指点. 废话不多说了.begin. 首先说下文件夹/文件大小与占用空间的区别. 这个是硬盘分区格式有关 大小是文件的实际大小,而占用空间是占硬盘的实际空间 以F

jmeter压力测试报告-转载自http://www.cnblogs.com/atwanli/articles/4908475.html

目录 XXX压力测试报告... 1 一  测试内容... 2 二  测试方法... 2 三  测试目标... 2 四  测试环境... 2 五  系统部署... 3 5.1 物理部署... 3 5.2 网络访问... 3 六  性能测试结果与分析... 4 6.1 jmeter集群压测(5进程-每个进行10线程)... 4 6.2 jmeter集群压测(10进程-每个进行5线程)... 7 6.3 jmeter集群压测(10进程-每个进行10线程)... 11 七  结果汇总分析... 13 一

转载--Python之路,进程、线程、协程篇(原文地址:http://www.cnblogs.com/alex3714/articles/5230609.html)

本节内容 进程.与线程区别 cpu运行原理 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queue队列 开发一个线程池 进程 语法 进程间通讯 进程池 进程与线程 什么是线程(thread)? 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务 A