C#:ORM--实体框架EF(entity framework)(2)
有三种不同的模式可以在您的应用中使用EF框架
- Database First
- Code First
- ModelFirst
Db-First
在DbFirst时,你使用VS中的EDM向导或使用EF命令来从数据库生成context和实体。
EF6广泛地支持 DbFirst,访问 EF6 DbFirst章节来学习如何使用EF6 DbFirst方法开发。
EF Core对这种方法仅提供有限的支持。
Code-First
当你的应用程序还没有数据库时,使用CodeFirst模式。在CodeFirst模式中,需要先写实体类(域类)和上下文类,然后EF使用迁移命令从这些类创建数据库。 遵守领域驱动设计(DDD)原则的开发者喜欢先编写域类,然后生成需要的数据库来存放数据。
阅读 EF6 CodeFirst教程 章节来学习EF6 CodeFirst 开发。 阅读 EF Core 章节来学习 EF Core 中的CodeFirst开发。
Model-First
Model-First 模式中,先在VS的可视化设计器中创建实体、关系和继承层次,然后从视觉模型生成实体类、context类和数据库脚本。
EF6包含这种模式的有限支持。
EF Core不支持这种模式。
选择您的应用程序开发方法
使用下面的流程图来决定在您的应用程序中正确的使用EF的方式:
根据上面的图,如果你的应用程序中已经有一个域类,那你可以使用CodeFirst模式,因为你可以从现有类创建一个数据库。如果你有一个数据库,那么你可以使用Database-First模式创建一个EDM。如果你没有数据库和类,并且喜欢在可视化设计器中设计你的数据库模型,那么使用ModelFirst 模式。
1.使用EF,创建Model (DataFirst)
- 在解决方案中,创建所使用的项目。例如:ASP网站项目、WinForm窗体项目……
- 在新建的项目中,添加 > 新建项 > 数据 > ADO.NET实体数据模型(.edmx)
- 在新建的.edmx中选择:从数据库生成(DatabaseFirst)
- 选择新建连接,填写连接数据库 > 填写登录数据库信息 > 选择或输入需要生成模型的数据库名称.
- 选择需要创建模型的表、视图、存储过程
- 点击下一步,直接生成(有些电脑可能会出现警告信息,忽视即可)。
2.使用EF创建的内容
0.创建完成后,项目会默认引入两个命名空间:EntityFramework、System.Data.Entity
1. 最外层为.edmx文件,EF模型设计器,展示从数据库创建的模型,包括:表名、属性(表字段)、导航属性(外键、表与表之间的对应关系)、表与表之间1对1、1对多的关系。
2. Model1.Context.tt、Model.Designer.cs、Model.edmx.diagram、Model1.tt
1). Model1.Context.tt:包含Model1.Context.cs
Model1.Context.tt由T4模板生成,不可更改,Model1.Context.cs继承自DbContext,包括构造方法(继承自父类的构造方法,并在此传递配置文件的数据库连接字符串)、各个表所对应的Dbset<T>类型的自动属性。
2). Model.Designer.cs:自动生成,无需更改
3) . Model.edmx.diagram:描述edmx文件的元素信息(名称、位置……)
4). Model1.tt:包含生成的Model.cs,自身由T4模板生成,无需修改
3.使用EF进行增删改查
查询

1 StudentMISEntities stu = new StudentMISEntities();
2 //IQueryable<Users> userInfoList=from u in stu.Users
3 var userInfoList = from u in stu.Users
4 where u.id == 10
5 select u;
6 foreach (var item in userInfoList)//EF延迟加载机制,数据用到的时候才去数据库中查询,不用的时候不去查询,提高程序性能
7 {
8 Response.Write(item.uName);
9 }

增加

1 Users userInfo = new Users();
2 userInfo.uName = "2333";
3 userInfo.uPassword = "123";
4 userInfo.uRole = "学生";
5
6 StudentMISEntities stu = new StudentMISEntities();//创建EF数据操作类实例
7 stu.Users.Add(userInfo);//把数据添加到EF,并添加标记
8 stu.SaveChanges();//把数据保存到数据库

修改

StudentMISEntities stu = new StudentMISEntities();
var userInfoList = from u in stu.Users
where u.id == 16
select u;
Users userInfo = userInfoList.FirstOrDefault();//返回第一个元素,如果没有的话,返回null
if (userInfo!=null)
{
userInfo.uPassword = "12345678";
stu.Entry<Users>(userInfo).State = System.Data.Entity.EntityState.Modified;//添加修改标记
stu.SaveChanges();
Response.Write(userInfo.uPassword);
}
else
{
Response.Write("要修改的数据不存在");
}

删除

1 StudentMISEntities stu = new StudentMISEntities();
2 var userInfoList = from u in stu.Users
3 where u.id == 17
4 select u;
5 Users userInfo = userInfoList.FirstOrDefault();//返回第一个元素,如果没有的话,返回null
6 if (userInfo!=null)
7 {
8 //stu.Users.Remove(userInfo);
9 stu.Entry<Users>(userInfo).State = System.Data.Entity.EntityState.Deleted;//添加删除标记
10 stu.SaveChanges();
11 Response.Write("已删除");
12 }
13 else
14 {
15 Response.Write("要删除的数据不存在");
16 }

C#:ORM--实体框架EF(entity framework)(2)的更多相关文章
- 实体框架(Entity Framework)简介
实体框架(Entity Framework)简介 简称EF,与ADO.NET关系 ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R ...
- 实体框架(Entity Framework)
实体框架(Entity Framework) 实体框架(Entity Framework)简介 ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对 ...
- 【转】在使用实体框架(Entity Framework)的应用中加入审计信息(Audit trail)跟踪数据的变动
在一些比较重要的业务系统中,通常会要求系统跟踪数据记录的变动情况.系统要记录什么时间,什么人,对那些信息进行了变动. 比较简单的实现方式是在每个表中加入两个字段CreatedBy和CreatedAt, ...
- 在使用实体框架(Entity Framework)的应用中加入审计信息(Audit trail)跟踪数据的变动
在一些比较重要的业务系统中,通常会要求系统跟踪数据记录的变动情况.系统要记录什么时间,什么人,对那些信息进行了变动. 比较简单的实现方式是在每个表中加入两个字段CreatedBy和CreatedAt, ...
- [转载]灵动思绪EF(Entity FrameWork)
很久之前就想写这篇文章了,但是由于种种原因,没有将自己学习的EF知识整理成一片文章.今天我就用CodeFirst和ModelFirst两种方式的简单案例将自己学习的EF知识做个总结. 在讲解EF之前, ...
- EF(Entity Framework)多对多关系下用LINQ实现"NOT IN"查询
这是今天在实际开发中遇到的一个问题,需求是查询未分类的博文列表(未加入任何分类的博文),之前是通过存储过程实现的,今天用EF实现了,在这篇博文中记录一下. 博文的实体类BlogPost是这样定义的: ...
- EF(Entity Framework)通用DBHelper通用类,增删改查以及列表
其中 通用类名:DBhelper 实体类:UserInfo 1 //新增 2 DBHelper<UserInfo> dbhelper = new DBHelper<UserInfo& ...
- Entity Framework(实体框架 EF)
什么是Entity Framework呢(下面简称EF)? EF(实体框架)是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架.ORM(对象关系映射框架):指的是面向 ...
- ORM框架 之 Entity Framework
Entity Framework 1.ADO.NET Entity Framework是以ADO.NET为基础所发展出来的对象关系对应(O/R Mapping)解决方案,早起被称为ObjectSpac ...
- 实体框架(Entity Frmaework)简介
l简称EF NH l与Asp.Net MVC关系与ADO.NET关系 lADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapp ...
随机推荐
- [leed code 179] Largest Number
1 题目 Given a list of non negative integers, arrange them such that they form the largest number. For ...
- Windows8.1 安装SQL Server2012——部分组件安装不成功!(提示安装.NET 3.5时出错,无Internet情况下利用win8.1安装镜像安装.NET 3.5)
虽然从事着与开发毫无关系的工作,但却也断断续续维持了近6年的WEB开发,有时因为其它工作原因,可能每做一个项目的时间间隔比较大,有时甚至在做的一个项目因为其他事情而停滞几个月之久(有些项目是自己兴趣或 ...
- 【Vue】浅谈Vue不同场景下组件间的数据交流
浅谈Vue不同场景下组件间的数据“交流” Vue的官方文档可以说是很详细了.在我看来,它和react等其他框架文档一样,讲述的方式的更多的是“方法论”,而不是“场景论”,这也就导致了:我们在阅读完 ...
- 201621123018《Java程序设计》第6周学习报告
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 2. 书面作业 1. clone方法 1.1 在 ...
- Maximum repetition substring(POJ - 3693)(sa(后缀数组)+st表)
The repetition number of a string is defined as the maximum number \(R\) such that the string can be ...
- 如何执行超过一百兆(100MB)的sql脚本?
最近遇到一个问题,在sqlserver的查询分析器里面执行一个超过100MB的数据库脚本,发现老是报“引发类型为“System.OutOfMemoryException”的异常”,上网查了一下,主要是 ...
- 【ElasticSearch】:elasticsearch.yml配置
ElasticSearch5的elasticsearch.yml配置 注意 elasticsearch.yml中的配置,冒号和后面配置值之间有空格 cluster.name: my-applicati ...
- 开发创建XMPP“发布订阅”扩展(xmpp pubsub extend)
发布订阅(PubSub)是一个功能强大的XMPP协议扩展.用户订阅一个项目(在xmpp中叫做node),得到通知时,也即当事项节点更新时.xmpp服务器通知用户(通过message格式). 节点类型: ...
- redis哨兵集群环境搭建
一.哨兵的介绍 哨兵(sentinal)是redis集群架构中非常重要的一个组件,主要功能如下: 集群监控,负责监控redis master和slave进程是否正常工作 消息通知,如果某个redis实 ...
- 剑指offer十三之调整数组顺序使奇数位于偶数前面
一.题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 二.思路 此题可 ...