.NET-ORM框架EF-Code First代码优先
前言
Code First顾名思义,通告代码创建实体与数据库。示例中我们会创建表,分表是Studen,Teacher。
Code First实战示例
打开VS2013,创建一个项目我这里是用的MVC框架来做的示例搞麻烦了,小伙伴们可用控制台一样的。命名为EFCodeFirst,如下图:

选中解决方案资源管理器中的项目,点击右键,选择”管理NuGet程序包” 添加EF


准备工作结束,接下来我们创建实体类,添加代码如下:


Studen:
public class Studen
{
public Studen() { }
[Key]
public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public Studen(string name, int age)
{
this.Name = name;
this.Age = age;
}
}
Teacher:
public class Teacher
{
public Teacher() { }
[Key]
public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public Teacher(string name, int age)
{
this.Name = name;
this.Age = age;
}
}
接下来我们设置数据库上下文Context,它继承于DbContext类。构造一个函数base中是设置数据库连接的驱动地址,要注意其中的对应关系Context代码如下:

学习C#的同学应该都知道DbContext是EF关联上下文所用的驱动,真对DbContext的解释如下:
DbContext: DbContext 实例表示工作单元和存储库模式的组合,可用来查询数据库并将更改组合在一起,这些更改稍后将作为一个单元写回存储区中。
然后我们开始往下增加数据表的操作如下示例:
DbSet:表示上下文中给定类型的所有实体的集合或可从数据库中查询的给定类型的所有实体的集合。
public class Context : DbContext
{
//base与Config中数据库连接字符串名称一样
public Context() : base("name=MyStrConn") { }
public DbSet<Studen> studen { get; set; }
public DbSet<Teacher> seacher { get; set; }
}
到目前映射数据库就添加完了(很简单吧)接下来让我们从程序处理,这大家应该都看得懂我是简历的MVC 所以方便省事直接仔仔action里面了 ,其中using里面就是EF对数据库的操作,创建实体然后然后db添加到student里面,执行
SaveChanges()方法添加到数据库
public ActionResult Index()
{
using (var db = new Context())
{
Studen stu = new Studen("", );
db.studen.Add(stu);
db.SaveChanges();
}
return View();
}

接下来让我们进行查询,大家可以看到下面是读取到了这样我们添加表和数据就完成了。

EF添加新表-迁移苦
在上面我们添加了数据库,但是在项目中两个表肯定是不用够用的。那我们在添加一个表。我们添加一个Car类,然后吧Car添加到Context上下文读取中。
public class Car
{
public Car() { }
[Key]
public int Id { get; set; } public string Name { get; set; } public string Color { get; set; } public Car(string name, string color)
{
this.Name = name;
this.Color = Color;
}
}
public class Context : DbContext
{
//base与Config中数据库连接字符串名称一样
public Context() : base("name=MyStrConn") { }
public DbSet<Studen> studen { get; set; }
public DbSet<Teacher> seacher { get; set; }
public DbSet<Car> car { get; set; } }
添加完之后,然后吧添加信息的字段改成Car类的字段
public ActionResult Index()
{
using (var db = new Context())
{
Car car = new Car("", "RED");
db.car.Add(car);
db.SaveChanges();
}
return View();
}
当我们再次执行启动上下文执行文件,可以看到以下提示:

为毛?接下来看怎么解决
PM> Enable-Migrations -Force
在程序集“EFCodeFirst”中找到多个上下文类型。
要允许“EFCodeFirst.Models.Context”的迁移,请使用 Enable-Migrations -ContextTypeName EFCodeFirst.Models.Context。
要允许“EFCodeFirst.Models.ApplicationDbContext”的迁移,请使用 Enable-Migrations -ContextTypeName EFCodeFirst.Models.ApplicationDbContext。
PM> Enable-Migrations -ContextTypeName EFCodeFirst.Models.Context
正在检查上下文的目标是否为现有数据库...
检测到使用数据库初始值设定项创建的数据库。已搭建与现有数据库对应的迁移“201806050721085_InitialCreate”的基架。若要改用自动迁移,请删除 Migrations 文件夹并重新运行指定了 -EnableAutomaticMigrations 参数的 Enable-Migrations。
已为项目 EFCodeFirst 启用 Code First 迁移。
PM> Add-Migration AddSocialNameAndRefreshToken
正在为迁移“AddSocialNameAndRefreshToken”搭建基架。
此迁移文件的设计器代码包含当前 Code First 模型的快照。在下一次搭建迁移基架时,将使用此快照计算对模型的更改。如果对要包含在此迁移中的模型进行其他更改,则您可通过再次运行“Add-Migration AddSocialNameAndRefreshToken”重新搭建基架。
PM> Update-Database
指定“-Verbose”标志以查看应用于目标数据库的 SQL 语句。
正在应用显式迁移: [201806050824112_AddSocialNameAndRefreshToken]。
正在应用显式迁移: 201806050824112_AddSocialNameAndRefreshToken。
正在运行 Seed 方法。
问题解决刷新下数据库看看我们的Car表存在否?

启动程序然后进行添加看看是否可以添加上数据,到这步就可以看到数据添加完成了。


如果小伙伴在测试过程中遇到了下面这个问题重启下SQL服务就好了。

写了半天手累的狠,觉得觉得有用小伙伴们就点个赞吧。
.NET-ORM框架EF-Code First代码优先的更多相关文章
- ORM框架 EF - code first 的封装
Code first 是Microsoft Entity Framework中的一种模式,CodeFirst不会有可视化的界面来进行拖动编辑DataBase-Entity,但会以一个类来进行对数据表关 ...
- ORM框架 EF - code first 的封装 优化一
上一节我们讲到对EF(EntityFramework)的初步封装,任何事情都不可能一蹴而就,通过大量的实际项目的实战,也发现了其中的各种问题.在这一章中,我们对上一章的EF_Helper_DG进行优化 ...
- EF之Code First代码优先
1.前言 通过英文可知,表示的是代码优先,一般创建EF都是先创建数据库,创建根据数据库的EF实体模型,而code - first 则是反过来!... 2.代码实战 我们这次创建的不是原来的数据库EF设 ...
- ORM框架EF
应用程序和数据库采用Tcp协议通讯 ORM框架有: NHibernate ,Dapper ,Mybatis 底层是 ADO.Net 好处: 1.面向对象 2.没有sql减少学习成本,快速开发 3.编译 ...
- MVC系列学习(二)-初步了解ORM框架-EF
1.新建 一个控制台项目 2.添加一个数据项 a.选择数据库 注:数据库中的表如下: b.选择EF版本 c.选择表 3.初步了解EF框架 看到了多了一个以 edmx后缀的文件 在edmx文件上,右击打 ...
- OracleSugar ORM框架的诞生,代码开源
经过四天的努力终于将SqlSugar ORM 成功支持ORACLE数据库 优点: 1.高性能,达到原生最高水准,比SqlHelper性能要高,比Dapper快30% 比EF快50% 2.支持多种数据库 ...
- MVC Code First (代码优先)
首先配置web.config <connectionStrings> <add name="BookDbContext" connectionString=&qu ...
- 使用Entity Framework 4进行代码优先开发
[原文地址]Code-First Development with Entity Framework 4 .NET 4随带发布了一个改进版的Entity Framework(EF)- 一个位于Sy ...
- C# ORM—Entity Framework 之Code first(代码优先)(二)
一.Entity Framework Code first(代码优先)使用过程 1.1Entity Framework 代码优先简介 不得不提Entity Framework Code First这个 ...
- EF框架搭建小总结--CodeFirst代码优先
前言:之前在下总结编写了一篇 EF框架搭建小总结--ModelFirst模型优先 博文,看到一段时间内该博文的访问量蹭.蹭蹭.蹭蹭蹭...往上涨(实际也不是很多,嘿嘿),但是还是按捺不住内心的喜悦(蛮 ...
随机推荐
- P层
package net.goeasyway.uploadimage.presenter; import net.goeasyway.uploadimage.model.Photo;import net ...
- CentOS开启telnet服务
原文地址:https://blog.csdn.net/zhujiangm/article/details/4540778 服务器:CentOS-5.1(192.168.1.87)客户机:FC6(192 ...
- background-attachment属性
通过对background-attachment属性的学习,辨析每个属性值之间的区别. 1.fixed与scroll的区别 background-attachment:fixed;当滚动页面滚动条时背 ...
- C语言+嵌入式SQL+DB2开发经验总结
1.使用DB2工具将SQC文件预编译成C文件和bnd文件. 命令: db2 prep ***.sqc version * package using * bindfile BLOCKING ALL I ...
- python yield 关键字
最近看代码看到python里面的yield关键字,和我之前接触的语言好像都没有来着,我就查了查它的含义,大概理解如下: >>> def createGenerator(): ... ...
- [转]linux VLAN配置(vconfig)
1.安装vlan(vconfig)和加载8021q模块 #aptitude install vlan #modprobe 8021q 2.使用linux vconfig命令配置vlan #vconfi ...
- 【npm】伙计,给我来一杯package.json!不加糖
前言:夜深了,我熬了一锅热气腾腾的package.json,给大家端上来,希望大家喜欢 json和JS对象的区别 package.json,顾名思义,它是一个json文件,而不能写入JS对象. 所以我 ...
- 吴恩达机器学习笔记50-主成分分析算法(PCA Algorithm)
PCA 减少
- CCS3怎么实现border边框渐变效果
下图注册按钮的边框有渐变效果,如果让你来实现,你会怎么做呢 个人觉得,省事的做法,直接让UI给背景图片就可以了,如下图 不过这种做法感觉不太灵活,如果要修改border的渐变颜色,就需要UI重新做图. ...
- SpringCache学习实践
1. SpringCache学习实践 1.1. 引用 <dependency> <groupId>org.springframework.boot</groupId> ...