“Database First”模式我们称之为“数据库优先”,前提是你的应用已经有相应的数据库,你可以使用EF设计工具根据数据库生成数据数据类,你可以使用Visual Studio模型设计器修改这些模型之间对应关系。

一、创建ADO.NET实体集

省略其他操作截图,创建成功,生成ModelEF.edmx。介绍生成的模型中的文件。

二、介绍模型中的文件

直接双击打开ModelEF.edmx文件,显示的是你创建实体集时选择的数据库表的属性图:

展开后有个以.tt的文件,这是T4模版文件,这些模版文件用于生成数据库上下文和实体集,双击可以查看:

数据库上下文,连接数据库全靠他了:

其中构造函数的base里的name属性是你连接的数据库配置名称,在你的.config文件中有:

另一个.tt文件则是生成实体类的模版文件:

三、声明数据库上下文,进行CRUD操作

 //1.声明一个EF上下文
EFDemoEntities dbContext = new EFDemoEntities();

四、查询

 EFDemoEntities dbContext = new EFDemoEntities();
foreach (var user in dbContext.T_User)
{
Console.WriteLine(user.NAME);
}

linq查询

 #region linq查询
var temp = from u in dbContext.T_User
where u.ID >
select u;
foreach (var u in temp)
{
Console.WriteLine(u.NAME);
}
#endregion

五、增

利用实体对象,主键如果是自增,可以不定义

 .声明一个EF上下文
EFDemoEntities dbContext = new EFDemoEntities();
.声明一个User实体
T_User user = new T_User();
user.LOGINNAME = "";
user.MAIL = "2@qq.com";
user.NAME = "";
user.PASSWORD = "";
user.PHONE = "";
user.ID = ;
.告诉EF对上面的实体进行一个插入操作
dbContext.T_User.Add(user);
.告诉上下文把实体的变化保存到数据库里
dbContext.SaveChanges();

六、删除

 //1.声明一个EF上下文
EFDemoEntities dbContext = new EFDemoEntities();
//2.声明一个User实体
T_User user = new T_User();
//user.LOGINNAME = "2";
//user.MAIL = "2@qq.com";
//user.NAME = "22";
//user.PASSWORD = "000000";
//user.PHONE = "12345678";
user.ID = ; //删除只要定义主键就好
//3.告诉EF对上面的实体进行一个删除操作
dbContext.Entry<T_User>(user).State = System.Data.EntityState.Deleted;
//4.告诉上下文把实体的变化保存到数据库里
dbContext.SaveChanges();

七、改

1.通过定义实体对象进行修改

 //1.声明一个EF上下文
EFDemoEntities dbContext = new EFDemoEntities();
//2.声明一个User实体
T_User user = new T_User();
user.LOGINNAME = "";
user.MAIL = "3@qq.com";
user.NAME = "";
user.PASSWORD = "";
user.PHONE = "";
user.ID = ; //修改必须指定主键
//3.告诉EF对上面的实体进行一个修改整条数据的操作
dbContext.Entry<T_User>(user).State = System.Data.EntityState.Modified;
//4.告诉上下文把实体的变化保存到数据库里
dbContext.SaveChanges();

2.指定修改字段

 //1.声明一个EF上下文
EFDemoEntities dbContext = new EFDemoEntities();
//2.声明一个User实体
T_User user = new T_User();
user.LOGINNAME = "";
user.MAIL = "3@enzemed.com";
user.NAME = "";
user.PASSWORD = "";
user.PHONE = "";
user.ID = ; //修改必须指定主键
//3.告诉EF对上面的实体进行某一列修改
dbContext.T_User.Attach(user);
dbContext.Entry<T_User>(user).Property<string>(p => p.MAIL).IsModified = true;
dbContext.Entry<T_User>(user).Property<string>(p => p.LOGINNAME).IsModified = true;
//4.告诉上下文把实体的变化保存到数据库里
dbContext.SaveChanges();

八、EntityState的几种状态

Detached:对象存在,但未由对象服务跟踪。在创建实体之后、但将其添加到对象上下文之前,该实体处于此状态,即对象与上下文处于分离状态;

Unchanged:自对象加载到上下文中后,或自上次调用 System.Data.Objects.ObjectContext.SaveChanges() 方法后,此对象尚未经过修改;

Added:对象已添加到对象上下文,但尚未调用 System.Data.Objects.ObjectContext.SaveChanges() 方法;

Deleted:使用 System.Data.Objects.ObjectContext.DeleteObject(System.Object) 方法从对象上下文中删除了对象;

Modified:对象已更改,但尚未调用 System.Data.Objects.ObjectContext.SaveChanges() 方法。

九、DbSet<TEntity>的Add和Attach

TEntity Add(TEntity entity);

将给定实体以 System.Data.EntityState.Added 状态添加到上下文中。保存更改后,“已添加”状态的实体将插入到数据库中。在保存更改后,对象状态将更改为System.Data.EntityState.Unchanged。

TEntity Attach(TEntity entity);

将给定实体以 System.Data.EntityState.Unchanged 状态附加到上下文中

十、Expression<Func<TEntity, TProperty>>

Func是定义委托,Expression是将委托的lamda表达式转换成sql语句。

EF(一)DB First的更多相关文章

  1. .net core 2.2 EF oracle db first

    Nuget控制台: Install-Package log4net Install-Package Newtonsoft.Json Install-Package Autofac Install-Pa ...

  2. EF查询之性能优化技巧

    上一篇:EF使用CodeFirst方式生成数据库&技巧经验 前言 EF相信大部分同学都已经经常使用了,可是你的查询高效吗? 今天我就以个人使用经验来讲讲在使用EF做查询的时候大家都容易忽略的性 ...

  3. 1_MVC+EF+Autofac(dbfirst)轻型项目框架_core层(以登陆为例)

    前言 在上一篇0_MVC+EF+Autofac(dbfirst)轻型项目框架_基本框架中,我已经介绍了这个轻型框架的层次结构,在下面的这篇文章中,我将以教师登陆功能为例,具体来扩充下我的core层的代 ...

  4. EF框架学习

    简称EF,ADO.NET Entity Framework是微软以ADO.NET为基础所发展出来的对象关系对应(O/R Mapping)解决方案,是微软的一个ORM(面向对象的对象模型和关系型数据库的 ...

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

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

  6. EF Dal通用类

    一个通用的ef  dal处理类是非擦汗那个提高工作效率的  using System; using System.Collections.Generic; using System.Data.Enti ...

  7. EF通用数据层封装类(支持读写分离,一主多从)

    浅谈orm 记得四年前在学校第一次接触到 Ling to Sql,那时候瞬间发现不用手写sql语句是多么的方便,后面慢慢的接触了许多orm框架,像 EF,Dapper,Hibernate,Servic ...

  8. 如何用VS EF连接 Mysql,以及执行SQL语句 和存储过程?

    VS2013, MySQL5.7.18 , MySQL5.7.14 执行SQL语句: ztp_user z = new ztp_user(); object[] obj = new object[] ...

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

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

  10. .Net中EF通用数据层小结

    增删改查: using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; u ...

随机推荐

  1. 大数据集群ssh登录其他机器失败 RSA host key for zb03 has changed and you have requested strict checking. Host key verification failed.

    [hadoop@zb02 .ssh]$ scp authorized_keys hadoop@zb03:/home/hadoop/.ssh @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ...

  2. 【Codeforces】【图论】【数量】【哈密顿路径】Fake bullions (CodeForces - 804F)

    题意 有n个黑帮(gang),每个黑帮有siz[i]个人,黑帮与黑帮之间有有向边,并形成了一个竞赛完全图(即去除方向后正好为一个无向完全图).在很多年前,有一些人参与了一次大型抢劫,参与抢劫的人都获得 ...

  3. Note of Jieba ( 词云图实例 )

    Note of Jieba jieba库是python 一个重要的第三方中文分词函数库,但需要用户自行安装. 一.jieba 库简介 (1) jieba 库的分词原理是利用一个中文词库,将待分词的内容 ...

  4. [模板][题解][Luogu1939]矩阵乘法加速递推(详解)

    题目传送门 题目大意:计算数列a的第n项,其中: \[a[1] = a[2] = a[3] = 1\] \[a[i] = a[i-3] + a[i - 1]\] \[(n ≤ 2 \times 10^ ...

  5. dup(dup2/dup3)

    readme man~ NAME dup, dup2, dup3 - duplicate a file descriptor SYNOPSIS #include <unistd.h> in ...

  6. Spring+Hibernate实现动态SessionFactory切换(改进版)

    前面写了一篇关于动态切换Hibernate SessionFactory的文章 发现存在一些问题: 需要配置多个HibernateTransactionManager和多个Spring 切面 这样带来 ...

  7. jquery复制图片

    <div class="img-div">           <a href="javascript:void(0);"><im ...

  8. python语法_列表list_列表内置方法

    list 列表 a = ['kevin','alxe','gm','dql','gyx'] a[1] = 'alxe' #按照索引获取数据,索引按照0开始,第一个数据的索引为0 切片: a[1:3] ...

  9. MyCP-实现文件的复制以及进制转换

    MyCP 一.设计思路 确定MyCP的要求 根据需求可知MyCP需要实现类似Linux下cp XXX1 XXX2的功能,且需要支持两个参数: java MyCP -tx XXX1.txt XXX2.b ...

  10. Python全栈-magedu-2018-笔记5

    第三章 - Python 内置数据结构 字符串 一个个字符组成的有序的序列,是字符的集合. python中一个字符也是str类型. 使用单引号.双引号.三引号引住的字符序列 字符串是不可变对象 Pyt ...