前言

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. spark入门

    这一两年Spark技术很火,自己也凑热闹,反复的试验.研究,有痛苦万分也有欣喜若狂,抽空把这些整理成文章共享给大家.这个系列基本上围绕了Spark生态圈进行介绍,从Spark的简介.编译.部署,再到编 ...

  2. PyCharm远程开发和调试

    PyCharm进行远程开发 1.背景 在Windows开发Python或Web应用程序,但是它们最后需要在linux上面来运行 2.解决办法 2.1 使用PyCharm内置支持的Vagrant 2.2 ...

  3. CentOS6.2上安装pip

    如果yum install pip执行失败.按如下步骤执行 首先安装epel扩展源: yum -y install epel-release 然后执行yum --disablerepo=epel -y ...

  4. iis发布后模板字体不能加载的解决方案

    在使用ace模板的过程中就曾遇到过图标不显示的情况, 1.在iis和vs运行都不能显示图标,添加缺失的字体库后可以访问 2.把项目签入到阿里云时再一次失效,解决方法是添加Mime类型 .woff  a ...

  5. 「ZJOI2018」历史(LCT)

    「ZJOI2018」历史(LCT) \(ZJOI\) 也就数据结构可做了-- 题意:给定每个点 \(access\) 次数,使轻重链切换次数最大,带修改. \(30pts:\) 挺好想的.发现切换次数 ...

  6. InnoDB Insert Buffer(插入缓冲)

    InnoDB Insert Buffer(插入缓冲) 每个存储存储引擎自身都有自己的特性(决定性能以及更高可靠性),而InnoDB的关键特性有: 插入缓冲(Insert Buffer)-->Ch ...

  7. 每天学点SpringCloud(九):SpringCloud最常用配置详解

    Eureka 属性名 说明 默认值 eureka.server.enable-self-preservation 关闭注册中心的保护机制,Eureka 会统计15分钟之内心跳失败的比例低于85%将会触 ...

  8. Python开发爆破工具

    上一篇讲到了如何用Python开发字典,而当我们手里有了字典 就可以进一步去做爆破的任务了,可以用现成的工具,当然也可以自己写 接下来我就要一步一步来写爆破工具! 爆破MySQL: 想要爆破MySQL ...

  9. Linux主机操作系统加固规范

      对于企业来说,安全加固是一门必做的安全措施.主要分为:账号安全.认证授权.协议安全.审计安全.总的来说,就是4A(统一安全管理平台解决方案),账号管理.认证管理.授权管理.审计管理.用漏洞扫描工具 ...

  10. web前端异步数据交互(长连接)

    Workers异步任务 开始(注册): divobjx=document.getElementsByTagName("div")[0]; var workdong=new Work ...