.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模型优先 博文,看到一段时间内该博文的访问量蹭.蹭蹭.蹭蹭蹭...往上涨(实际也不是很多,嘿嘿),但是还是按捺不住内心的喜悦(蛮 ...
随机推荐
- 性能测试---CPU内存部分
CPU内存的测试可以通过top命令来测试 ,如下是我写的bat脚本,其中的测试进程可以替换为你自己需要测试的进程. @echo offecho============================= ...
- ubuntu设置ssh登录
1.为ubuntu添加root用户(其实Ubuntu中的root帐号默认是被禁用了的,所以登陆的时候没有这个账号),打开初始账号,输入命令:sudo passwd root,设置root的密码 2.切 ...
- python 字典详细使用
1. 字典 字典是无序.可变序列. 定义字典时,每个元素的键和值用冒号分隔,元素之间用逗号分隔,所有的元素放在一对大括号“{}”中. 字典中的键可以为任意不可变数据,比如整数.实数.复数.字符串.元组 ...
- 站在JAVA数据结构的视角看待简单表结构
1.前言: 我们提到程序中的集合的时候,往往脑海中会浮现出, 如ArrayList和LinkedList以及和HashMap.当然在提到ArrayList和LinkedList的时候,我们大多数的人都 ...
- 白话TCP为什么需要进行三次握手
阅读本文大概需要 2.3 分钟. 作者:雨林 https://www.cnblogs.com/yuilin 首先简单介绍一下TCP三次握手 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次 ...
- 配置IDM不限速下载百度云的大文件
IDM介绍Internet Download Manager(简称IDM)是一个用于Windows系统的下载管理器,它是共享软件,免费试用期为30天,但是每月均有一段时间优惠. IDM可以让用户自动下 ...
- HTTP 协议服务器相关概念
1.HTTP/1.1规范允许一台HTTP服务器搭建多个Web站点,即物理层面只有一台服务器,使用虚拟主机功能,可就假想有多台服务器. 在相同IP地址下,由于虚拟主机可以寄存多个不同主机名和域名的网站, ...
- 微信小程序-form表单-获取用户输入文本框的值
微信小程序-form表单-获取用户输入文本框的值 <input name='formnickname' class="textarea" placeholder=" ...
- Python - Fabric简介
1 - Fabric Fabric是一个Python的库,提供了丰富的同SSH交互的接口,可以用来在本地或远程机器上自动化.流水化地执行Shell命令. 非常适合用来做应用的远程部署及系统维护.简单易 ...
- Docker - 参考信息
初见 从 0 开始了解 Docker 可能是把Docker的概念讲的最清楚的一篇文章 Docker新手指南 8 个基本的 Docker 容器管理命令 Docker 核心技术与实现原理 在线教程 Doc ...