.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模型优先 博文,看到一段时间内该博文的访问量蹭.蹭蹭.蹭蹭蹭...往上涨(实际也不是很多,嘿嘿),但是还是按捺不住内心的喜悦(蛮 ...
随机推荐
- flask-cookie & session
Cookie @app.route('/') def hello_world(): name=request.cookies.get('Name') # 获取cookie resp = Respon ...
- Docker构建JDK环境
创建目录mkdir oracle-jdk 构建文件touch Dockerfile # Docker for jdk-8u181 FROM centos:7 MAINTAINER ggza " ...
- 【转载】sql monitor
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27067062/viewspace-2129635/ SQL Monitor Report 1. SQL Monit ...
- Microsoft Azure IoTHub Serials 2 - 如何为android应用添加IoTHub支持
1. 在build.gradle(app)文件的dependencies中添加对以下项的依赖: 'com.microsoft.azure.sdk.iot:iot-device-client:1.5.3 ...
- Nerd的畅销产品
感谢陈大先生花费时间一起细致地讨论这个课题,促成此文. <Nerd的套现ATM机>中已经谈到,对于nerd来讲最畅销的产品是“考试通过”.本文将继续这个话题的展开讨论,更深入细致地分析这个 ...
- flask上下文(new)
flask源码解析之上下文 引入 对于flask而言,其请求过程与django有着截然不同的流程.在django中是将请求一步步封装最终传入视图函数的参数中,但是在flask中,视图函数中并没有请求参 ...
- 分布式文件系统 / MQ / 鉴权(轮廓)
FastDFS的轮廓 / RabbitMQ的轮廓 / JWT和RSA非对称加密的轮廓
- Struts2新漏洞S2-046在线实验环境全球首发
Strust2 又出现漏洞啦?搞事情啊? 据说S2-046漏洞和S2-045漏洞非常相似,都是由报错信息带入了buildErrorMessage方法造成的, 只是这次存在两个触发点哦!危害嘛,你说嘞? ...
- Android NDK学习(七):NDK 编译支持 C++特有的库
如果你的C++代码中出现了很多C++特有的库,例如<iostream>,<list>等,那么你还需要在jni的文件夹下添加一个Application.mk文件,文件内容为: A ...
- node.js服务器搭建
//1.导入http 核心模块 const http = require("http"); //2.调用http.createServer 方法,创建一个web 服务器对象 con ...