Entity Framework 四
实体框架支持三种类型的查询:1)LINQ to Entities,2)Entity SQL,3)Native SQL
LINQ方法语法:
LINQ查询语法:
实体SQL: 这种可以简单的了解,不必深入研究,知道LINQ语法或原始SQL查询就可以了。
实体SQL是另一种创建查询的方法。它由实体框架的对象服务直接处理。它返回ObjectQuery而不是IQueryable。
您需要ObjectContext来使用Entity SQL创建一个查询。
原生SQL:
LINQ-to-Entities查询本质就是使用了LINQ查询语法
DbSet类
DBSet类表示用于创建,读取,更新和删除操作的实体集。当构建时不知道实体的类型时,可以使用DBSet(DbSet <TEntity>)的通用版本。
您可以通过使用DBContext获取DBSet的引用,例如。dbcontext.Students等。DbContext类包括DbSet,如下所示:
DBSet类的一些重要方法:
访问MSND获取有关DBSet类的更多信息。
DBEntityEntry类
DBEntityEntry是一个重要的类,在检索有关实体的各种信息时非常有用。您可以使用DBContext的Entry方法获取特定实体的DBEntityEntry实例。例如:
DBEntityEntry使您可以访问给定实体的所有属性的实体状态,当前值和原始值。以下示例代码显示如何检索特定实体的重要信息。
DbEntityEntry使您能够将实体状态添加,修改或删除,如下所示。
DBEntityEntry类具有以下重要的方法:
有关DBEntityEntry类的更多信息,请访问MSDN 。
在实体框架中更改跟踪:
实体框架支持在上下文的生命周期中加载实体的自动更改跟踪。DbChangeTracker类为您提供有关当前正在被上下文跟踪的实体的所有信息。
请注意,每个实体必须具有EntityKey(主键)属性才能被上下文跟踪。实体框架不会在没有EntityKey属性的概念模型中添加任何实体。
例如:
static void Main(string[] args)
{
using (var ctx = new SchoolDBEntities())
{
Console.WriteLine("查找");
var student = ctx.Students.Find();
Console.WriteLine("{0}个实体上下文跟踪情况", ctx.ChangeTracker.Entries().Count());
DisplayTrackedEntities(ctx.ChangeTracker);
Console.WriteLine("查找");
var student1 = ctx.Standards.Find();
Console.WriteLine("{0}个实体上下文跟踪情况", ctx.ChangeTracker.Entries().Count());
Console.WriteLine("编辑");
student1.StandardName = "编辑名称";
DisplayTrackedEntities(ctx.ChangeTracker);
Teacher teacher = new Teacher() { TeacherName = "新老师" };
Console.WriteLine("添加老师");
ctx.Teachers.Add(teacher);
Console.WriteLine("{0}个实体上下文跟踪情况", ctx.ChangeTracker.Entries().Count());
DisplayTrackedEntities(ctx.ChangeTracker);
Console.WriteLine("删除学生");
ctx.Students.Remove(student);
DisplayTrackedEntities(ctx.ChangeTracker);
}
} private static void DisplayTrackedEntities(DbChangeTracker changeTracker)
{
Console.WriteLine("");
var entries = changeTracker.Entries();
foreach (var item in entries)
{
Console.WriteLine("实体名称:{0}", item.Entity.GetType().FullName);
Console.WriteLine("状态:{0}", item.State);
}
Console.WriteLine("");
Console.WriteLine("----------------------------");
}
每当我们检索,添加,修改或删除任何实体时,上下文都会跟踪实体。请注意,在实体的任何操作过程中,上下文都处于活动状态。如果您对范围外的实体进行任何操作,则上下文不会跟踪。
持久化一个实体框架
使用EntityFramework,连接和断开连接的场景来持久化一个实体有两种情况。
连接场景:这是当从数据库中检索实体并在相同的上下文中使用persist时。Context对象不会在实体的实体检索和持久化之间破坏。
断开连接的场景:断开的连接场景是从数据库中检索实体,并使用上下文中的不同对象提交更改的实体。以下示例说明了断开的情况:
根据上述情况,Context1用于读取操作,然后Context1被销毁。一旦实体发生变化,应用程序使用Context2提交实体 - 一个不同的上下文对象。
断开的情况是复杂的,因为新的上下文不知道修改的实体的任何内容,所以你将不得不指示实体中已经改变的上下文。在下图中,应用程序使用上下文1检索实体图,然后应用程序对其执行一些CUD(创建,更新,删除)操作,最后使用上下文2保存实体图。上下文2不知道什么在这种情况下,已经在实体图上执行了操作。
Entity Framework 四的更多相关文章
- 第四篇 Entity Framework Plus 之 Batch Operations
用 Entity Framework 进行 增,删,改.都是基于Model进行的,且Model都是有状态追踪的.这样Entity Framework才能正常增,删,改. 有时候,要根据某个字段,批量 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章 ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (21) -----第四章 ASP.NET MVC中使用实体框架之在页面中创建查询和使用ASP.NET URL路由过虑
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 4.2. 构建一个搜索查询 搜索数据是几乎所有应用的一个基本功能.它一般是动态的,因 ...
- Entity Framework 数据库初始化四种策略
策略一:数据库不存在时重新创建数据库 Database.SetInitializer<testContext>(new CreateDatabaseIfNotExists<testC ...
- Entity Framework数据库初始化四种策略
策略一:数据库不存在时重新创建数据库 程序代码 Database.SetInitializer<testContext>(new CreateDatabaseIfNotExists< ...
- Entity FrameWork初始化数据库的四种策略
程序猿就是苦逼,每天还得分出一些时间去写博文.天真的很热,今天就随便写一点啦! 1.EF初始化数据库的四中策略 EF可以根据项目中的模型自动创建数据库.下面我们就分类看看Entity Framewor ...
- Entity Framework Code First (四)Fluent API - 配置属性/类型
上篇博文说过当我们定义的类不能遵循约定(Conventions)的时候,Code First 提供了两种方式来配置你的类:DataAnnotations 和 Fluent API, 本文将关注 Flu ...
- Entity Framework学习笔记(四)----Linq查询(1)
请注明转载地址:http://www.cnblogs.com/arhat 从本章开始,老魏就介绍一下Entity Framework使用Linq来查询数据,也就是Linq To Entity.其实在E ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第四章:更高级的数据管理
在这一章我们将学习如何正确地删除分类信息,如何向数据库填充种子数据,如何使用Code First Migrations基于代码更改来更新数据库,然后学习如何执行带有自定义错误消息的验证. 注意:如果你 ...
随机推荐
- 查询指定tomcat应用的进程数
假设应用名称为pear,查询指定tomcat应用pear的进程数: ps -ef |grep "/datong/tomcat-pear/" |grep -v tail | grep ...
- 深入理解JavaScript系列(15):函数(Functions)
介绍 本章节我们要着重介绍的是一个非常常见的ECMAScript对象——函数(function),我们将详细讲解一下各种类型的函数是如何影响上下文的变量对象以及每个函数的作用域链都包含什么,以及回答诸 ...
- 跨页面传值2之cookie多值使用
单值cookie结构 CookieKeyName——CookieValue CookieKeyName2——CookieValue2 ............... 通过CookieKeyName进行 ...
- 项目搭建系列之三:SpringMVC框架下使用Ehcache对象、数据缓存
注明:该文章为以前写的文章,这里只更改了标题,无GitHub源码下载. 一.准备工作 如果已经成功搭建SpringMVC环境,那么就可以进入Ehcache的准备工作了.1.下载jar包 Ehca ...
- WPF MVVM 如何在ViewModel中操作View中的控件事件
(在学习Wpf的时候,做一个小例子,想在TextBox改变后,检验合法性,并弹出提示.在找了很多贴后,发现这个小例子,抄袭过来,仅供参考. 最后也找到了适合自己例子的办法:在出发TextChanged ...
- Hibernate课堂笔记
1.java持久化概述 Java持久化简称(JPA), 即把程序中的临时数据持久保存到数据库中.由于jdbc开发效率低,我们就提出了对象关系映射(ORM)的概率 2.ORM 通过java持久化提供的A ...
- 选择排序——Java实现
一.排序思想 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是: 从待排序列中选出最小(或最大)的一个元素,记录其下标(数组)的位置: 将记录的下标值与待排序列的第一个 ...
- Personal Geodatabase - Can't Create New or Open Existing
来自:http://forums.arcgis.com/threads/32110-Personal-Geodatabase-Can-t-Create-New-or-Open-Existing Per ...
- Java Web:主动和被动方式检测安全的框架
对于某些敏感的系统例如支付.交易需要为其加固,有必要将可能的攻击情况考虑进来加以防范,于是有了这么一个简易的安全框架.在前辈的代码上( 详见 :http://blog.csdn.net/zhongwe ...
- 设计模式——工厂方法模式(Factory Method)
原文地址:http://www.cnblogs.com/Bobby0322/p/4179921.html 介绍 在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计 ...