前言

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代码优先的更多相关文章

  1. ORM框架 EF - code first 的封装

    Code first 是Microsoft Entity Framework中的一种模式,CodeFirst不会有可视化的界面来进行拖动编辑DataBase-Entity,但会以一个类来进行对数据表关 ...

  2. ORM框架 EF - code first 的封装 优化一

    上一节我们讲到对EF(EntityFramework)的初步封装,任何事情都不可能一蹴而就,通过大量的实际项目的实战,也发现了其中的各种问题.在这一章中,我们对上一章的EF_Helper_DG进行优化 ...

  3. EF之Code First代码优先

    1.前言 通过英文可知,表示的是代码优先,一般创建EF都是先创建数据库,创建根据数据库的EF实体模型,而code - first 则是反过来!... 2.代码实战 我们这次创建的不是原来的数据库EF设 ...

  4. ORM框架EF

    应用程序和数据库采用Tcp协议通讯 ORM框架有: NHibernate ,Dapper ,Mybatis 底层是 ADO.Net 好处: 1.面向对象 2.没有sql减少学习成本,快速开发 3.编译 ...

  5. MVC系列学习(二)-初步了解ORM框架-EF

    1.新建 一个控制台项目 2.添加一个数据项 a.选择数据库 注:数据库中的表如下: b.选择EF版本 c.选择表 3.初步了解EF框架 看到了多了一个以 edmx后缀的文件 在edmx文件上,右击打 ...

  6. OracleSugar ORM框架的诞生,代码开源

    经过四天的努力终于将SqlSugar ORM 成功支持ORACLE数据库 优点: 1.高性能,达到原生最高水准,比SqlHelper性能要高,比Dapper快30% 比EF快50% 2.支持多种数据库 ...

  7. MVC Code First (代码优先)

    首先配置web.config <connectionStrings> <add name="BookDbContext" connectionString=&qu ...

  8. 使用Entity Framework 4进行代码优先开发

    [原文地址]Code-First Development with Entity Framework 4   .NET 4随带发布了一个改进版的Entity Framework(EF)- 一个位于Sy ...

  9. C# ORM—Entity Framework 之Code first(代码优先)(二)

    一.Entity Framework Code first(代码优先)使用过程 1.1Entity Framework 代码优先简介 不得不提Entity Framework Code First这个 ...

  10. EF框架搭建小总结--CodeFirst代码优先

    前言:之前在下总结编写了一篇 EF框架搭建小总结--ModelFirst模型优先 博文,看到一段时间内该博文的访问量蹭.蹭蹭.蹭蹭蹭...往上涨(实际也不是很多,嘿嘿),但是还是按捺不住内心的喜悦(蛮 ...

随机推荐

  1. enumerate的用法

    names = ["tony","huluwa","tom","jerry","lala"]for ...

  2. 解压->静态库.a文件

    1. cd /Volumes/HHD/PQS/apple/Public 2. file com_PQS.a com_PQS.a: Mach-O universal binary with 5 arch ...

  3. jQuery 基础语法

    jQuery介绍 1.jQuery是一个轻量级的.兼容多浏览器的JavaScript库. 2.jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方便地进行Aja ...

  4. 大数据之hiveSQL

    最近增加了学习java基础算法,包括几种排序算法,二叉树(前序,后序,中序),队列和栈,bmp搜索,广义搜索算法,迭代等等一些技巧(自己动手绝对比单纯的理论要强的多,多练练) HIVE是hadoop生 ...

  5. [转]SDN与OpenFlow技术简介

    http://blog.163.com/s_zhchluo/blog/static/15014708201411144727961/ 本文是2012年文章,对Openflow的发展.规范.应用和SDN ...

  6. PaaS平台的尴尬与变革

    当今时代只要提到云计算这个词语,一定会提到云计算分为IaaS.PaaS.SaaS 这三个层面,现阶段云环境中IaaS和SaaS都实现了商品化.但是,PaaS作为云计算的服务模式之一,既不像IaaS那样 ...

  7. 感悟优化——Netty对JDK缓冲区的内存池零拷贝改造

    NIO中缓冲区是数据传输的基础,JDK通过ByteBuffer实现,Netty框架中并未采用JDK原生的ByteBuffer,而是构造了ByteBuf. ByteBuf对ByteBuffer做了大量的 ...

  8. Docker学习笔记-CentOS7镜像

    前言: 环境:centos7.5 64 位 正文: 第一步:下载centos7镜像 docker pull centos 第二步:建立centos7的容器 sudo docker run --priv ...

  9. 微信小程序合法域名配置-不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书

    微信小程序合法域名配置-不校验合法域名.web-view(业务域名).TLS 版本以及 HTTPS 证书 很多教程说按照以上方式调用即可.但是当我们在程序中实际调用以上程序时,就会报错, http:/ ...

  10. 使用异步任务降低API延迟_实践总结

    之前在想如何降低API的延迟,这些API里有几个比较耗时的操作且是串行执行,那通过异步执行的方式理论上可以降低运行的时间,如下图所示: 具体的实现比较简单,例如这样: public class Par ...