ef 用了ef core code firstt from database 怎么增加新表

Code First添加一个现有数据库中的表
来源:博客园
描述 刚刚使用EF,还没搞明白,遇到下面问题,记录一下。 都说Entity Framework好用,一直也没用过,以前写代码都是ADO.NET,写起来费时费力还没什么大进展,如果能把这些事简化一下把精力放到逻辑或者更有用的地方岂不是更好。所以想使用Entity Framework的Code First方式。 Code First,从字面的意思来看是先有代码后有数据库,通过代码中的Model来创建数据库,好像只能是通过Model来生成数据库,至少我接触2天以来是这样。 如果我已经有一个数据库了,而我又想用Code First怎么办? Code First添加现有数据库 Visual Studio 2015有一个功能,添加Code First From Database,通过这个工具生成我们需要的Model和DbContext。 这个时候我们应该就可以享受Entity Framework带给我们的方便快捷了。 但是如果的表结构需要变化怎么办? Migrations 这个工具可以让我们做到,只要Model有变化我们可以通过一个命令行把已有的变化同步到数据库中,使我们的Model和数据库表结构一致。 Migrations使用方法: /zh-cn/data/jj591621 这个工具是可以同步我们的字段,但是同步的时候会从新创建一次数据表,提示错误表对象已经存在,这是因为,Migrations认为我们刚刚通过VS生成的Model是新建的表,所以他要先数据库里创建一次表。 那我的Model刚刚生成的时候和数据库中的结构是一样的,有没有办法让Migrations知道,不需要重新创建表了? 让Migrations认识数据库中的表 下面这个视频已经给我们答案了,将现有表加入到Migrations中的方法: /Blogs/EF/Migrations-Existing-Databases 其实很简单。 1、使用ADO.NET实例数据模型工具,来自数据库的Code First(VS2015),将需要的表的Model生成到项目中,这个时候必要的Model模型已经出来了。 2、我做的时候把生成模型的DbContext删除掉了,用我自己的DbContext,如果自己没创建过用生成的也可以,毕竟有那么多的DbContext连接的功能还是一样的看起来很碍眼,把生成的DbSet复制到自己的DbContext中。 3、Enable-Migrations 命令,上边有具体这个使用方法 4、使用Add-Migrations –Name Initial -IgnoreChanges,这里的IgnoreChnages参数是重点,忽略我们代码中的变化,然Migrations认为我们的代码已经和数据库中的表格式一样了,本来我们就是一样的,我们刚刚通过VS工具生成的,这个时候还没有完成任务,数据库那边并不知道你干了什么,这里只是添加了一个计划,Update-Datebase才能使我们的命令生效。 5、输入Update-Database,这个时候应该就可以了,以后在有表结构变化,修改model然后使用Migrations更新就可以了。
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动3.3 使用Code First数据库迁移
当Entity Framework Code First的数据模型发生异动时,默认会引发一个System.InvalidOpertaionException异常。一种解决方法是在Global.asax文档里的Application_Sart方法上,加上一段System.Data.Entity.Database.SetInitializer()方法,让EF自动将数据库删除,然后重新创建模型。
System.Data.Entity.Database.SetInitializer(
new System.Data.Entity.DropCreateDatabaseIfModelChanges&MvcGuestbook.Models.MvcGuestbookContext&());
System.Data.Entity.DropCreateDatabaseIfModelChanges方法的作用是在Model发生改变时,会运行Drop和Create Database等动作。不过,这种将数据库砍掉重建的方式实在过于残暴,应该使用更人性化的方式,让EF帮助我们自动调整数据库架构,并且仍然保留现有数据库中的数据。而这种开发技术就是Code First数据库迁移(DB Migration)。Code First数据库迁移技术,在EF4.3.1版本之后才支持。
在本节的演示中,将用以下数据模型定义示范数据库迁移:
public class Guestbook
public int Id { }
[Required]
public string Message { }
public DateTime CreatedOn { }
public virtual Member Member { }
public class Member
public int Id { }
[Required]
[MaxLength()]
public string Name { }
[MaxLength()]
public string Email { }
public virtual ICollection&Guestbook& Guestbooks { }
另外,在进行本节实验之前,请先将Global.asax中的以下程序代码进行批注:
System.Data.Entity.Database.SetInitializer(
new System.Data.Entity.DropCreateDatabaseIfModelChanges&MvcGuestbook.Models.MvcGuestbookContext&());
&&&EF Code First数据库迁移的方法。
Enable-Migrations
Add-Migration Initial
Update-Database
1. EF Code First如何记录版本
2. 启用数据库迁移
若要在项目中启用数据库迁移功能,必须先开启程序包管理器控制台(Package Manager Console)视图(点击&视图 | 其他窗口 | 程序包管理器控制台&),然后输入Enable-Migrations指令。
PM& Enable-Migrations -ContextTypeName MvcGuestbook.Models.MvcGuestbookContext
运行Enable-Migrations指令的过程中,VS2012会帮助我们在指定的项目里创建一个Migrations目录,该目录下还创建有两个重要的文档,一个是*_InitialCreate.cs文档,另一个是Configuration.cs文档。3.运行数据库迁移
下面来更改Member数据模型。请新增两个字段:分别是Username与Password属性,定义如下:
public class Member
public int Id { }
[Required]
[MaxLength()]
public string Name { }
[MaxLength()]
public string Email { }
[Required]
[MaxLength()]
public string Username { }
[Required]
[MaxLength()]
public string Password { }
public ICollection&Guestbook& Guestbooks { }
我们通过Package Manager Console输入Add-Migration指令,来新增一条数据库迁移版本,输入时必须带上一个&版本名称&参数。例如,要想取名为AddUsernamePassword,则可以输入以下指令:
PM& Add-Migration AddUsernamePassword
运行完成后一样会在Migrations文件夹中再新增一个文件,如图所示。
这次运行Add-Migration指令,所代表的意思就是新增一次运行数据库迁移命令,VS2012会自动对比当前数据库中的Model定义与当前更改过的数据模型,并将差异的字段变化写入这个自动新增的类别内。
&&&& &每一次新增数据库迁移版本,其类别内都会包含一个Up()方法与Down()方法,所代表的意思分别是&升级数据库&与&降级数据库&的动作,所以数据库迁移不仅仅是将数据库升级,还可以恢复到旧版本。
当前还没有对数据库做任何迁移动作,所以数据库中的数据结构并没有任何改变,为了确认实际情况,可以先手动在Members数据表中输入几条数据,以确认过一会儿数据库迁移之后数据是否消失,如图所示。
接着我们正式对数据库进行迁移动作。请在程序包管理控制台视图中输入指令如下。
PM& Update-Database
更新数据库成功后,你可以再次检查Member数据表结构是否发生变化,还有数据表属性是否仍存在,如图所示。
4.自定义数据库迁移规则
5.自动数据库迁移
Enable-Migrations &EnableAutomaticMigration
对于实体插入操作,直接使用Update-Database
对于实体更新和删除操作,使用
Add-Migration Initial
Update-Database
6.如何避免数据库被自动创建或自动迁移
7.获取Sql脚本
Update-Database &Script
Update-Database &Script &SourceMigration:$InitialDatabase &TargetMigration: AddPostAbstract
8. 迁移到特定版本
Update-Database &TargetMigration:ad1
Update-Database &TargetMigration:$InitialDatabase
我们知道无论是&Database First&还是&Model First&当模型发生改变了都可以通过Visual Studio设计视图进行更新,那么对于Cod ...
1.在“服务资源管理器”连接数据库 2.打开工具-Nuget程序包管理器“程序包管理器控制台” 3.控制台输入命令:PM& Enable-Migrations -StartUpProjectNa ...
一.命令开启 1.打开控制台:视图-&其他窗口-&程序包管理器控制台: 2.启动数据库迁移,执行命令:enable-migrations 创建成功后会新增migrations目录等. 若 ...
生成数据库 修改类文件PortalContext.cs的静态构造函数,取消当数据库模型发生改变时删除当前数据库重建新数据库的设置. PortalContext() { Database.SetInit ...
1.简介 Entity Framework 的Code First 方式,提供了一种方式:编写模型Model,生成模型变更,根据模型变更修改数据库. 而其所以来的环境就是强大的Nuget,如果还在是V ...
原文:Code First Migrations and Deployment with the Entity Framework in an ASP.NET MVC Application 1.启用 ...
1.创建Mvc项目 2.安装Entity Framework 2.1.如下图打开程序包管理器控制台: 2.2.输入命令Install-Package EntityFramework,即可安装Entit ...
1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...
本文讨论的内容是基于EF4.1版本.文中谈论的现有的数据库不是由EF创建.本文假定你已经对Code First迁移有一定的了解,如果不了解Code First迁移更新数据库可以查看 文章涉及的主题如下 ...
创建Aggregate来合并模拟器和真机通用的framework 然后在Build Phases下New Run Script Phase创建合并脚本: # Constants SF_TARGET_N ...
这里简单加上几个验证,非空,最小长度,唯一 修改模型 修改app/models/post.rb文件,如下: class Post & ActiveRecord::Base #attr_acces ...
Mybatis一级.二级缓存
一级缓存 首先做一个测试,创建一个mapper配置文件和mapper接口,我这里用了最简单的查询来演示. &mapper namespace=&c ...
1.尝试非阻塞形式获取锁 tryLock() :当前线程尝试获取锁,如果锁被占用返回如果成功则占有锁 //类似用法if(lock.tryLock()) { try { System.out ...
&?xml version=&1.0& encoding=&UTF-8&?&&!DOCTYPE hibernate-configuration ...
想要深入理解ORB的工作过程与原理,学习与了解GIOP消息格式必不可少.我们知道GIOP是独立于具体通信的更高级别的抽象,因此这里针对GIOP在TCP/IP上的实现IIOP协议进行学习与分析(IIOP ...
Electron enables you to create desktop applications with pure JavaScript by providing a runtime with ...
在Linux系统中,安装好oracle数据库服务后,并不像在Windows系统下一样,oracle服务在默认情况下会随时系统的启动自动启动.Linux系统中,是需要用户去手动进行设置,才能实现orac ...
插上电源关机状态开机前按住走纸键(FEED)先别放手长按大概5-10秒手放开,打印机就会自动打印出一张测试纸的,纸上有个IP的,此IP就是打印机IP了!
myeclipse页面编辑框空格.回车符.对齐出现特殊字符 解决办法:window-preferences-general-editors-Text Editors
把show whitespa ...}

我要回帖

更多关于 ef6 code first 教程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信