一、原理:

如何查看真正执行的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原理和状态管理的更多相关文章

  1. Entity FrameWork(实体框架)是以ADO.NET Entity FrameWork ,简称为EF

    Entity FrameWork(实体框架)是以ADO.NET Entity FrameWork ,简称为EF Entity FrameWork的特点 1.支持多种数据库(MSSQL.Oracle.M ...

  2. .net core Entity Framework 与 EF Core

    重点讲 Entity Framework Core ! (一)Entity Framework 它是适用于.NET 的对象关系映射程序 (ORM),现在的EF6已经是久经沙场,并经历重重磨难,获得一致 ...

  3. Entity Framework 教程——EF体系结构

    EF体系结构 下图是一张EF体系结构的全景图,让我们单独了解各个组件的用处. EDM (Entity Data Model): EDM由3个主要部分组成,概念模块(Conceptual Model), ...

  4. Entity Framework查询,EF执行SQl

    一.简介 EF 支持开放底层的 ADO.NET 框架,DbContext有三种常用方法 DbSet.SqlQuery //查询并返回Entities DbContext.Database.SqlQue ...

  5. Entity Framework 四

    实体框架支持三种类型的查询:1)LINQ to Entities,2)Entity SQL,3)Native SQL LINQ方法语法: LINQ查询语法: 实体SQL: 这种可以简单的了解,不必深入 ...

  6. 张高兴的 Entity Framework Core 即学即用:(一)创建第一个 EF Core 应用

    写在前面 Entity Framework Core (EF Core) 是 .NET 平台流行的对象关系映射(ORM)框架.虽然 .NET 平台中 ORM 框架有很多,比如 Dapper.NHibe ...

  7. [EF] 如何在 Entity Framework 中以手动方式设定 Code First 的 Migration 作业

    Entity Framework (简称 EF) 发展到现在, 版本已经进入 6.1.0, 距离我写的「在 VS2013 以 Code First 方式建立 EF 资料库」这篇文章已有半年的时间.如果 ...

  8. Entity Framework (EF) Core工具创建一对多和多对多的关系

     一. EntirtyFramework(EF)简介 EntirtyFramework框架是一个轻量级的可扩展版本的流行实体框架数据访问技术,微软官方提供的ORM工具让开发人员节省数据库访问的代码时间 ...

  9. EF(Entity Framework)系统学习系列

    好久没写博客了,继续开启霸屏模式,好了,废话不多说,这次准备重新系统学一下EF,一个偶然的机会找到了一个学习EF的网站(http://www.entityframeworktutorial.net/) ...

随机推荐

  1. LCA最近公共祖先(POJ1330)

    题目链接:http://poj.org/problem?id=1330 解题报告: 先将一个子节点,深搜每一个根节点,并标记. 然后深索另一个子节点,当发现访问过了,就找到了最近的公共祖先. #inc ...

  2. 2018.7.3 JS实现增删改查没有连接数据库

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  3. 20145238-荆玉茗 《Java程序设计》实验三

    20145238-荆玉茗-实验三 实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营 ...

  4. 【转】css行高line-height的一些深入理解及应用

    一.前言 前两天在腾讯ISD团队博客上看到一篇翻译的文章“深入理解css 行高”,是个不错的文章,学到了不少东西,建议您看看. 这里,我也要讲讲我对line-height的一些理解,所讲解的东西绝大多 ...

  5. P2096 最佳旅游线路

    最大字段和加贪心 算长了个见识吧 #include<iostream> #include<cstdio> #include<algorithm> using nam ...

  6. 前端HTML之表单

    1.列表标签 1.1无序列表<ul>,当中每一层都是<li>    <ul> <li>张三</li> <li>李四</li ...

  7. linux安装openldap步骤

    目录 虚拟机环境:centos 7 一.环境准备 1.关闭 selinux firewalld 临时: setenforce 0  永久: vi /etc/sysconfig/selinux SELI ...

  8. 本地通过VMware Workstation创建虚拟机,配置网络环境

    通过VMware Workstation创建虚拟机,系统安装完成后,需要配置相应网卡设置: 打开配置文件:vim /etc/sysconfig/network-scripts/ifcfg-ens33 ...

  9. python__标准库 : 正则表达式(re)

    re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none. re.search 扫描整个字符串并返回第一个成功的匹配. 替换: re.sub(p ...

  10. js三目运算符执行多个条件

    三元运算符的结果语句可以执行多个操作,每个操作用逗号分隔就可以,例子如下: var a=1: a>5?(alert(1),alert(2)):(alert(3),alert(4))