前言

首先来简单的复习一下如何使用Code First。

第一步还是先建立一个控制台的应用程序,然后通过Nuget添加Entity Framework。那么同时会给packages.config和App.config添加相应的配置。

第二步添加一个数据操作上下文实体类。添加两个构造函数,并添加一个Person的实体类。 在App.config的配置文件中添加相应的数据链接配置。

第三步在调用即可生成相应的数据库。

EFContext.cs

public class EFContext:DbContext
{
public EFContext()
: base("EFContext")
{ } public EFContext(string connectionstring)
:base(connectionstring)
{ } public DbSet<Person> Persons { get; set; }
}

  App.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="EFContext" connectionString="Data Source=.;Database=EFContext;UID=sa;PWD=sa123;" providerName="System.Data.SqlClient"></add>
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
</configuration>

package.config 

<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="5.0.0" targetFramework="net45" />
</packages>

  然后简单的添加了一个实体类

public class Person
{
public int PersonId { get; set; } public string PersonName { get; set; } public int Age { get; set; } public string Address { get; set; } public string Email { get; set; }
}

  最终进行调用

static void Main(string[] args)
{
using (var db = new EFContext("EFContext"))
{
var persons = db.Persons.Where(t => t.PersonName == "aehyok").OrderByDescending(t => t.PersonId).ToList();
foreach (var p in persons)
{
Console.WriteLine("The PersonName is {0} and Age {1}", p.PersonName, p.Age);
}
}
Console.ReadLine();
}

  运行后控制台没有数据显示,但是在数据库里可以查看到相应的数据库EFContext和数据表People。

现在我们通过数据库直接为上面建立的数据库EFContext中的People表手动添加了几条数据。

然后重新运行程序。可以发现有数据了。

此时可以发现我们的第一个简答的查询语句已经实现了。

  一个数据库上下文的生命周期随着该对象的创建而开始,随着对象的释放(或GC回收)而结束,因此建议在开发过程中使用“Using”编码方式,这样就可以免去手动释放对象的操作。另外对于数据库连接的管理在EF中是透明的,我们一般不需要手动进行处理,当查询一个对象时打开连接当处理完查询的结果集之后会自动关闭连接。

Linq To Entity表达式查询

查询表达式是C#3.0新增的功能,它是由一组类似于T-SQL或XQuery声明性语句组成,CLR并不能直接读取这种查询表达式而是在编译时转换为对应的方法调用。如下面的例子:

using (var db = new EFContext("EFContext"))
{
var persons = from p in db.Persons
where p.PersonName == "aehyok"
orderby p.PersonId descending
select p;
foreach (var p in persons)
{
Console.WriteLine("The PersonName is {0} and Age {1}", p.PersonName, p.Age);
}
}
Console.ReadLine();

  得到的结果同上面是一致的。

基于方法的查询

基于方法的查询事实上是一组对象的扩展方法,同Linq查询不同的是这些方法可以直接被CLR识别并运行。

例如上面的方法我们可以转换为如下代码,他们的效果是一样的,返回的都是“IQueryable”对象,这里的代码其实也就是我们开始为创建数据库测试的代码

using (var db = new EFContext("EFContext"))
{
var persons = db.Persons.Where(t => t.PersonName == "aehyok").OrderByDescending(t => t.PersonId).ToList();
foreach (var p in persons)
{
Console.WriteLine("The PersonName is {0} and Age {1}", p.PersonName, p.Age);
}
}
Console.ReadLine();

  当然执行的结果还是一样的。

原生SQL的查询

EF还支持原生SQL查询, 在DataBase上的SQlquery使你能够执行sql返回任意类型的数据,例如:

using (var db = new EFContext("EFContext"))
{
var persons = db.Persons.SqlQuery("select * from EFContext..People where PersonName='aehyok'");
foreach (var p in persons)
{
Console.WriteLine("The PersonName is {0} and Age {1}", p.PersonName, p.Age);
}
}
Console.ReadLine();

  可以直接通过SQL语句的拼接额,当然这里只是做了最简单的实例。

  不仅如此,EF还支持非实体类型的查询:

using (var db = new EFContext("EFContext"))
{
var persons = db.Database.SqlQuery<string>("select PersonName from EFContext..People where PersonName='aehyok'");
foreach (var p in persons)
{
Console.WriteLine("The PersonName is {0} ", p);
}
}

使用DataBase的ExecuteSqlCommand去更新数据:

using (var db = new EFContext("EFContext"))
{
var persons = db.Database.ExecuteSqlCommand("update EFContext..People set Address='中国' where PersonName='aehyok'");
}

使用ExecuteSqlCommand 或者SqlQuery直接指定存储过程:

context.Database.ExecuteSqlCommand ("EXECUTE [dbo].[DoSomething]").

Entity Framework 简单查询的更多相关文章

  1. Entity Framework 简单增删改操作

    前言 在 Entity Framework 简单查询操作 中主要是学习了在Entity Framework中的几种不同模式的查询操作,现在主要来学习一下简单的增加.删除.修改操作. 增加 在EF中添加 ...

  2. 整理一下Entity Framework的查询

    整理一下Entity Framework的查询 2012-08-30 13:41:59 标签:Entity Framework 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信 ...

  3. 整理一下Entity Framework的查询 [转]

    Entity Framework是个好东西,虽然没有Hibernate功能强大,但使用更简便.今天整理一下常见SQL如何用EF来表达,Func形式和Linq形式都会列出来(本人更喜欢Func形式). ...

  4. 转:整理一下Entity Framework的查询

    Entity Framework是个好东西,虽然没有Hibernate功能强大,但使用更简便.今天整理一下常见SQL如何用EF来表达,Func形式和Linq形式都会列出来(本人更喜欢Func形式). ...

  5. Entity Framework的查询

    Entity Framework是个好东西,虽然没有Hibernate功能强大,但使用更简便.今天整理一下常见SQL如何用EF来表达,Func形式和Linq形式都会列出来(本人更喜欢Func形式). ...

  6. Entity Framework异步查询和保存

    EF6开始提供了通过async和await关键字实现异步查询和保存的支持(.net 4.5及更高版本).虽然不是所有的操作都能从异步中获益,但是耗时的操作.网络或IO密集型任务中,使用异步可以提升客户 ...

  7. Entity Framework关联查询以及数据加载(延迟加载,预加载)

    数据加载分为延迟加载和预加载 EF的关联实体加载有三种方式:Lazy Loading,Eager Loading,Explicit Loading,其中Lazy Loading和Explicit Lo ...

  8. Entity Framework (二) 查询

    待完善-------------------------------------- ----------- base 关键字用于从派生类中访问基类的成员: 调用基类上已被其他方法重写的方法. 指定创建 ...

  9. Entity Framework: 视图查询时重复返回第一行值, duplicate frst rows in resultset from a view

    http://blog.csdn.net/riverlau/article/details/7476449 1. 使用rownumber给view加上一个标示列 SELECT ROW_NUMBER() ...

随机推荐

  1. python获取父类的子类(遍历,递归),并循环执行所有子类的某一方法

    前言 换了新工作,踏足于python语言的开发,也把自己的学习过程记录下来. 一,递归获取某一父类的所有子类 all_subclasses = {'0': '0'} def get_all_class ...

  2. ajax处理缓冲问题

    1.禁止页面缓存 header("Cache-Control:no-cache"); header("Pragma:no-cache"); header(&qu ...

  3. Redux原理(一):Store实现分析

    写在前面 写React也有段时间了,一直也是用Redux管理数据流,最近正好有时间分析下源码,一方面希望对Redux有一些理论上的认识:另一方面也学习下框架编程的思维方式. Redux如何管理stat ...

  4. python简单搭建HTTP Web服务器

    对于Python 2,简单搭建Web服务器,只需在i需要搭建Web服务器的目录(如C:/ 或 /home/klchang/)下,输入如下命令: python -m SimpleHTTPServer 8 ...

  5. 异常 Exception

    异常:是指在程序运行的过程中发生的一些不正常的时间. 分为受查异常和非受查异常. 受查异常:编译时期出现的异常   除了RuntimeException的异常,必须处理以及throws 非受查异常:运 ...

  6. v-for遍历出的元素上添加click事件,获取对应元素上的属性id值

    <span v-for="(n,nav) in floorList" data-id="{{nav.itemId}}" v-on:click=" ...

  7. Le lié à la légèreté semblait être et donc plus simple

    Il est toutefois vraiment à partir www.runmasterfr.com/free-40-flyknit-2015-hommes-c-1_58_59.html de ...

  8. Codis——分布式Redis服务的解决方案

    Codis——分布式Redis服务的解决方案 之前介绍过的 Twemproxy 是一种Redis代理,但它不支持集群的动态伸缩,而codis则支持动态的增减Redis节点:另外,官方的redis 3. ...

  9. 关于LESS

    LESS 是动态的样式表语言,通过简洁明了的语法定义,使编写 CSS 的工作变得非常简单. 翻译成大白话:写CSS算是体力活,并没有编程的感觉,不给前端人员装逼的机会,于是就搞了这玩意,相当于编程写C ...

  10. Sublime Text 3 Emmet插件安装

    一.手动安装:   1. Emmet (ex-Zen Coding) for Sublime Text  http://emmet.io (1) 下载:https://github.com/serge ...