Entity Framework(四)--EF原理和状态管理
一、原理:
如何查看真正执行的SQL是怎样的?
DbContext有一个Database属性,Database属性有一个Log属性,是Action委托类型其中的参数就是sql语句,每次EF执行sql语句的时候都会执行Log,因此就知道执行了什么sql;
EF的查询是“延迟执行”的,只有遍历结果集的时候才执行select查询,Tolist()内部也是遍历结果集形成的List;
static void Main(string[] args)
{
using (TestDbContext ctx = new TestDbContext())
{
ctx.Database.Log = sql =>
{
Console.WriteLine(sql);
};
var ps= ctx.Persons.Where(p => p.Id <); Console.WriteLine("开始执行了"); foreach (var p in ps)
{
Console.WriteLine(p.ToString());
} Console.ReadKey();
}
}
long[] ids = { , , };
var result = ctx.Persons.Where(p => ids.Contains(p.Id));
result.toList();
//二次过滤,在sql中自动拼接。
long[] ids = { , , };
var result = ctx.Persons.Where(p => ids.Contains(p.Id));
result = result.Where(p => p.Name.Length > );
EF多次指定where来实现动态的复合检索; select返回值必须写成IQueryable<Person>
EF是夸数据库的,如果迁移到Mysql数据库上,就会编译成Mysql语法。要配置对应数据库的EntityFrameworkProvider
每次执行_MigrationHistory 是DBMigration用的,也就是EF帮我们建数据库,可以禁用:
Database.SetInitializer<****DbContext>(null)
二、执行原始Sql语句:
在一些特殊的场合,需要执行原生的SQL。
执行非查询语句:调用DbContext 的Database 属性的ExecutesqlCommand 方法,可以通过占位符的方式传递参数:
using (TestDbContext ctx = new TestDbContext())
{ string name = "Tony";
ctx.Database.ExecuteSqlCommand("insert into T_Persons(Name,CreateDateTime) values({0},GetDate())", name); Console.ReadKey();
}
执行查询语句:
static void Main(string[] args)
{
using (TestDbContext ctx = new TestDbContext())
{ var result= ctx.Database.SqlQuery<GroupCount>(" select Age,COUNT(*) as GroupCounts from T_Persons group by Age ");
foreach (var item in result)
{
Console.WriteLine(item.Age+"="+item.GroupCounts);
} Console.ReadKey();
}
}
public class GroupCount
{
public int Age { get; set; }
public int GroupCounts { get; set; }
}
三、EF对象的状态
EF中的对象有五个状态: Derached(游离态,脱离态),Unchange(未改变),Added(新增),Deleted(删除),Modified(被修改)
Entity Framework(四)--EF原理和状态管理的更多相关文章
- Entity FrameWork(实体框架)是以ADO.NET Entity FrameWork ,简称为EF
Entity FrameWork(实体框架)是以ADO.NET Entity FrameWork ,简称为EF Entity FrameWork的特点 1.支持多种数据库(MSSQL.Oracle.M ...
- .net core Entity Framework 与 EF Core
重点讲 Entity Framework Core ! (一)Entity Framework 它是适用于.NET 的对象关系映射程序 (ORM),现在的EF6已经是久经沙场,并经历重重磨难,获得一致 ...
- Entity Framework 教程——EF体系结构
EF体系结构 下图是一张EF体系结构的全景图,让我们单独了解各个组件的用处. EDM (Entity Data Model): EDM由3个主要部分组成,概念模块(Conceptual Model), ...
- Entity Framework查询,EF执行SQl
一.简介 EF 支持开放底层的 ADO.NET 框架,DbContext有三种常用方法 DbSet.SqlQuery //查询并返回Entities DbContext.Database.SqlQue ...
- Entity Framework 四
实体框架支持三种类型的查询:1)LINQ to Entities,2)Entity SQL,3)Native SQL LINQ方法语法: LINQ查询语法: 实体SQL: 这种可以简单的了解,不必深入 ...
- 张高兴的 Entity Framework Core 即学即用:(一)创建第一个 EF Core 应用
写在前面 Entity Framework Core (EF Core) 是 .NET 平台流行的对象关系映射(ORM)框架.虽然 .NET 平台中 ORM 框架有很多,比如 Dapper.NHibe ...
- [EF] 如何在 Entity Framework 中以手动方式设定 Code First 的 Migration 作业
Entity Framework (简称 EF) 发展到现在, 版本已经进入 6.1.0, 距离我写的「在 VS2013 以 Code First 方式建立 EF 资料库」这篇文章已有半年的时间.如果 ...
- Entity Framework (EF) Core工具创建一对多和多对多的关系
一. EntirtyFramework(EF)简介 EntirtyFramework框架是一个轻量级的可扩展版本的流行实体框架数据访问技术,微软官方提供的ORM工具让开发人员节省数据库访问的代码时间 ...
- EF(Entity Framework)系统学习系列
好久没写博客了,继续开启霸屏模式,好了,废话不多说,这次准备重新系统学一下EF,一个偶然的机会找到了一个学习EF的网站(http://www.entityframeworktutorial.net/) ...
随机推荐
- POJ-1195 Mobile phones---裸的二维树状数组(注意下标从1,1开始)
题目链接: https://vjudge.net/problem/POJ-1195 题目大意: 直接维护二维树状数组 注意横纵坐标全部需要加1,因为树状数组从(1,1)开始 #include<c ...
- mayan 游戏真是毒瘤
如题 真坑呀!!! 可算过了 我率先达到了氧气富有化 先是改变时没有fall.40分 然后是fall函数写慢了 tle 50分 . 上代码 #include<cstdio> #includ ...
- getnumdevices.c && setgetdevicetype例程
getnumdevices.c代码 /* 文件名: getnumdevices.c * 功能 : 测试函数acc_get_num_devices(.) */ #include<stdio.h&g ...
- LinkedHashMap使用心得
基本概念:https://www.cnblogs.com/xiaoxi/p/6170590.html 遇到问题: 1.构造方法 public static LinkedHashMap<Strin ...
- Objective-c 单例设计模式
Objective-c 单例设计模式 一.什么是单例模式:(Singleton) 单例模式的意图是是的类的对象成为系统中唯一的实例,提供一个访问点,供客户类共享资源. 二.什么情况下使用 ...
- esdoc 自动生成接口文档介绍
原文地址:https://www.xingkongbj.com/blog/esdoc/creat-esdoc.html 官网 ESDoc:https://esdoc.org/ JSDoc:http:/ ...
- POJ2409 Let it Bead(Polya定理)
Let it Bead Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6443 Accepted: 4315 Descr ...
- ABAP 调用远程rfc
ABAP 调用rfc DESTINATION附加项后面接的是远程目标名称,该目标在事务SM59中设定,其中包含连接和登录远程系统所需的全部参数信息.如果调用的就是本机的RFC目标,则DESTINATI ...
- mariadb源码编译安装及多实例
准备文件源文件/app/mariadb-10.2.12.tar.gz cd /app/ tar xf mariadb-10.2.12.tar.gz cd mariadb-10.2.12 mkdir ...
- datatable 默认按某字段排序
"columns": [ { data: null}, { data: 'name'}, { data: 'birthday'} ], "order": [[ ...