使用NuGet助您玩转代码生成数据————Entity Framework 之 Code First
[前言] 如果是Code First老鸟或者对Entity Framework不感兴趣,就不用浪费时间往下看了。
记得09年第一次接触ORM————Linq2Sql,从此对她的爱便一发不可收拾,一年后,新的工作用上了EF,突然感觉彷佛是生活中出现了一个与你的爱人一样优秀但却没有你爱人缺点的Girl,真的难以抗拒。后来又因为各种缘故,接触EF越来越少,直到最近没那么忙才重拾EF。
关于EF我就不废话了,如果是EF新人(对Code First而言我也绝对是个新人),个人觉得还是从Code First去学吧。
瞎诌结束,以下为本文主题。
由于园子里关于EF的介绍已经有很多,但是本人做Code First还是走了不少曲折之路(主要在Code=>DB),故而编写本文分享。在Code First中,编写完代码并运行之后,我们的Model会同步到Db中,但是往往我们需要的是编写完Model就生成数据库,而不是等UI部分完成并运行之后才看到数据库,借助NuGet程序包管理器可以让我们即时完成Code=>DB。
准备:1.本人开发工具为VS2012,使用的是.NET Framework 4.5(EF5);
2.然后确保已在VS扩展中安装了最新的“NuGet程序包管理器”;
3.常用的三行NuGet用于EF命令(当然可以直接用命令“get-help EntityFramework”获取):“Enable-Migrations” --在对应项目中启用、“Add-Migration <名称>” --搭建基架、“Update-Database” --提交(应用基于代码的迁移)
4.新建类库项目“CodeFirst”。
开始:
1.在vs打开“程序包管理控制台”,输入“get-help NuGet”回车,可以查看一些命令。

2. 在程序包管理控制台输入“Install-Package EntityFramework”,此过程必须保证机子联网,如未联网,本人有个法子,就是在项目中新建Entity Framework(如“ADO.NET实体数据模型”)项,然后再删除该项即可。上述命令执行前确保如下图所示说明

此时可以看到项目多了个文件“packages.config”,同样在引用下多了“EntityFramework”的程序集。而在解决方案目录下则多了文件夹“packages”(物理目录,非解决方案目录),假如我们要拷贝项目,则应连同该目录拷贝,否则到别的目录下再编译项目之前仍然重新需要执行“Install-Package EntityFramework”,这是在将解决方案添加到源码管理时需要注意的地方。
3.项目下添加项目文件夹“Models”,并在该文件夹编写以下三个类与一个枚举(EF5对枚举的支持是非常棒的):
/// <summary>
/// 性别
/// </summary>
public enum Gender
{
Female = ,
Male,
LadyBoy
}
enum Gender
/// <summary>
/// 人名
/// </summary>
public class PersonName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName
{
get
{
return string.Format("{0} {1}", FirstName, LastName);
}
}
}
PersonName
public abstract class BaseModel
{
public BaseModel()
{
this.CreatedTime = DateTime.Now;
this.LastUpdatedTime = DateTime.Now;
} public DateTime CreatedTime { get; set; }
public string Creater { get; set; }
public DateTime LastUpdatedTime { get; set; }
public string LastUpdater { get; set; }
}
BaseModel
[Table("UserInfo")]
public class UserModel : BaseModel
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public string LoginName { get; set; }
[MaxLength()]
public string Password { get; set; }
public int Age { get; set; }
public Gender Gender { get; set; }
public DateTime? LastLoginTime { get; set; }
public PersonName Name { get; set; }
}
UserModel
4.在项目下继续新建类“CodeFirstDbContext”
public class CodeFirstDbContext : DbContext
{
public DbSet<UserModel> Users { get; set; } public CodeFirstDbContext() : base("DefautConnection") { } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<UserModel>();
}
}
CodeFirstDbContext
5.在“程序包管理控制台”(注意第二步截图中所说的,以下关于NuGet命令均必须如此),输入“Enable-Migrations”回车,项目多了Migrations目录。
6.在解决方案下新建控制台项目“ConsoleUI”,再在该项目下新建文件夹“App_Data”(此步骤非必须,我系统未安装SQL Server,因而我将使用数据库文件,文件则位于当前刚创建的目录下)。
7.在DbContext所在的项目CodeFirst下的App.config下添加如下节点(注意不要添加到configSections节点之前)
<connectionStrings>
<add name="DefautConnection" connectionString="data source=(LocalDB)\v11.0;attachdbfilename=H:\shuju\VS2012\CodeFirst\ConsoleUI\App_Data\CodeFirstDb.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>
8.在“程序包管理控制台”输入命令“Enable-Migrations”,保证无错误提示,继续输入“Add-Migration CreateDb”,注意CreateDb可由咱们自行定义。
此时VS生成了一个名字很长的cs文件,可以看到其为咱们创建数据表的代码,EF对枚举、复杂类型、实体继承都提供了非常棒的知识,我们此时可以修改相应代码以生成我们希望看到的表结构。

9.编写控制台程序以验证我们的程序(注意添加引用并添加app.config添加数据连接字符串)。
public static void Main()
{
UserModel model = new UserModel
{
Age = ,
Creater = "me",
Gender = Gender.LadyBoy,
LastUpdater = "me",
LoginName = "admin",
Name = new PersonName { FirstName = "san", LastName = "zhang" },
Password = ""
};
using (CodeFirstDbContext context = new CodeFirstDbContext())
{
context.Users.Add(model);
context.SaveChanges();
}; Console.WriteLine("成功添加用户,接下来将获取。。。"); using (CodeFirstDbContext context = new CodeFirstDbContext())
{
UserModel getModel = context.Users.FirstOrDefault();
Console.WriteLine("名字:{0},性别:{1},创建时间:{2}"
, getModel.Name.FullName, getModel.Gender, getModel.CreatedTime);
}; Console.Read();
}
10.收工。
完成之后就感觉很容易,由于我之前机子未联网而在做demo时颇费周折。在来看看我们用到的NuGet命令:
Install-Package EntityFramework
Enable-Migrations
Add-Migration
Update-Database
使用NuGet助您玩转代码生成数据————Entity Framework 之 Code First的更多相关文章
- 使用Entity Framework通过code first方式创建数据库和数据表
开发环境 WIN10 Entity Framework6.0 MVC5.0 开发工具 VS2015 SqlServer2012 1.创建上下文Context继承DbContext,并创建其他的业 ...
- Entity Framework 之Code First自动数据迁移
using MvcShopping.Migrations; using MvcShopping.Models; using System; using System.Collections.Gener ...
- 代码生成工具——Entity Framework Power Tools
Entity Framework Power Tools是VS上的一个根据数据库生成Model的Code First映射工具.在VS里面右键即可看到.什么,没有? 别慌,可以单独下载的,见 https ...
- Entity Framework应用:Code First模式数据迁移的基本用法
使用Entity Framework的Code First模式在进行数据迁移的时候会遇到一些问题,熟记一些常用的命令很重要,下面整理出了数据迁移时常用的一些命令. 一.模型设计 EF默认使用id字段作 ...
- Entity Framework 学习系列(3) - MySql Code First 开发方式+数据迁移
目录 # 写在前面 一.开发环境 二.创建项目 三.安装程序包 四.创建模型 五.连接字符串 六.编辑程序 七.数据迁移 写在最后 # 写在前面 这几天,一直都在学习Entity Framework ...
- Entity Framework(六):数据迁移
在前面的几篇文章中,简单的介绍了如何使用Entity Framework的Code First模式创建数据库,但是,在前面的几篇文章中,我们都是通过使用数据库初始化策略来做,也就是每次先删除数据库然后 ...
- 玩转大数据系列之Apache Pig高级技能之函数编程(六)
原创不易,转载请务必注明,原创地址,谢谢配合! http://qindongliang.iteye.com/ Pig系列的学习文档,希望对大家有用,感谢关注散仙! Apache Pig的前世今生 Ap ...
- Entity Framework 程序设计入门二 对数据进行CRUD操作和查询
前一篇文章介绍了应用LLBL Gen生成Entity Framework所需要的类型定义,用一行代码完成数据资料的读取, <LLBL Gen + Entity Framework 程序设计入门& ...
- 浅谈Entity Framework中的数据加载方式
如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Arc ...
随机推荐
- 【转】WPF DataGrid 获取选中的当前行某列值
方法一:DataRowView mySelectedElement = (DataRowView)dataGrid1.SelectedItem; string result = mySelectedE ...
- Web APi之Web Host消息处理管道(六)
前言 我们知道Web API本身是无法提供请求-响应的机制,它是通过Web Host以及Self Host的寄宿的宿主方式来提供一个请求-响应的运行环境.二者都是将请求和响应抽象成HttpRespon ...
- 初探nodeJS
一.node概要 对nodeJS早有耳闻,但是一直迟迟没有对它下手,哈哈哈,今儿咱就来初探一下它. nodeJS是个啥东东? nodeJS,我的理解就是可以运行在后端的JavaScript. 为什么它 ...
- php文件扩展名判断
<!DOCTYPE> <html> <head> <meta http-equiv="Content-type" content=&quo ...
- (2)从实际项目谈起,基于MEF的插件框架之总体设计
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.MEF框架简介 MEF的全称是Managed Extensibil ...
- C#运用GmaQrCode生成二维码
项目中需要生成二维码,方法比较多,可以采用JS插件,也可以采用第三方插件后台生成二维码,在后台方法中可以采用QRCode或者GmaQrCode,现在介绍一种C#在后台生成二维码的方法: /// < ...
- C#基于两种需求向图片添加水印
使用场景 1.也就是大家经常用的,一般是图片的4个角落,基于横纵坐标来添加. 2.在图片内基于固定位置,文字始终居中.刚开始我基于第一种场景来根据水印汉字的长度来计算坐标,后来发现方法始终不可靠.现在 ...
- 【集合框架】JDK1.8源码分析之Collections && Arrays(十)
一.前言 整个集合框架的常用类我们已经分析完成了,但是还有两个工具类我们还没有进行分析.可以说,这两个工具类对于我们操作集合时相当有用,下面进行分析. 二.Collections源码分析 2.1 类的 ...
- js实现动画效果框架
RT,是参照慕课的教程做的.两个多小时的教程,看完了然后晚上的时候做了下,看的时候感觉明白了,但其实做的时候还是有很多小细节需要处理的. 上代码,思想什么的直接去慕课看教程就好了.点击这里 注释也比较 ...
- jQuery打造智能提示插件二(可编辑下拉框)
在上一篇 jQuery打造智能提示插件 上改进,增加下拉按钮,修复点击下拉区域外不隐藏BUG 效果 下拉按钮素材: js封装,注意红色部分为BUG修复,然后传入boxwidth不带px: /* /// ...