概要

Entity Framework缩写EF,微软ORM产品。

本篇博客将简单的介绍它,至于它的详细深层次的使用,大家能够查询对应的操作手冊,该篇不过入门。

Entity Framework和Linq to Sql的关系

大家都知道Linq to Sql是微软ORM思想的一个详细产品。Entity Framework也是它的一个详细产品,那么,这两个产品有什么差别呢?

Linq to Sql是ORM思想实现的一个轻量级的框架,Entity Framework是一个重量级框架;

Linq to Sql和Entity Framework的一个重要的差别就是,Linq to Sql仅仅能针对于SQL Server数据库,而Entity Framework能够针对于非常多的数据库(Oracle,SQL Server等),也就是说Entity Framework是跨数据库的。不要小看这一点,在实际的开发中,非常的牛叉,以下我们举例说明。

我们使用经典三层构建一个项目,我们须要写自己的D层,假设此时我们换了数据库,那么,我们须要重写D层。假设我们在创建这个项目的时候,使用了Linq to Sql,那么我们的D层创建的很的简单,可是,当我们换数据库的时候,Linq to Sql框架就无论用了;假设我们在创建这个项目的时候,使用了Entity Framework框架,那么。我们仅仅须要改一个配置文件就能够了,不须要改动程序中的代码。

为什么使用Linq to Sql或Entity Franework

回答这个问题,我们就要说一说D层存在的问题了。

我们写D层的时候。我们一般会抽象出来一个SQLHelper类,这个类实现了对数据库的增删查改,然后,我们再创建对应的D层类。这些D层类里面的方法的功能,事实上都一样,唯一不同的就是SQL。从这里我们能够看到。我们的D层的问题,那就是,我们反复性的书写一些不必要的类或者方法,解决这种方法就须要慢慢的抽象。抽象出共同拥有的东西,像:DataTable装换为实体集。操作数据库的几类方法(注意其參数),然后将其一整合。这个大致就是我们所属的ORM思想实现的雏形了。当然,上面所说的那些东西。Linq
to Sql或Entity Framework这些框架已经帮助我们实现了,我们仅仅须要使用它们提供的方法即可了,从这里我们也能够看到。假设我们使用这些框架。我们程序猿在编程的时候。差点儿不须要管理D层的东西,仅仅须要关注业务的实现就能够了。

Entity Framework的实例

SQL脚本

CREATE DATABASE DBFirst
GO
USE DBFirst
GO CREATE TABLE T_Customer
(
ID INT PRIMARY KEY IDENTITY(1,1),
CusName VARCHAR(20) NOT NULL
)
CREATE TABLE T_Order
(
ID INT PRIMARY KEY IDENTITY(1,1),
CustomerID INT FOREIGN KEY REFERENCES T_Customer(ID),
DepName VARCHAR(20) NOT NULL
)

程序代码

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamliZW4ycWluZ3NoYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data; namespace EF.EntityFrameworkDemo
{
class Program
{
static void Main(string[] args)
{
#region 加入实体
////创建上下文对象
//DBFirstEntities dbFirst = new DBFirstEntities();
////操作实体
//T_Customer customer = new T_Customer();
//customer.CusName = "新添用户";
////附加在上下文
//dbFirst.T_Customer.AddObject(customer);
////保存
//dbFirst.SaveChanges();
#endregion #region 删除实体
////1、创建上下文对象
//DBFirstEntities dbFirst = new DBFirstEntities();
////2、创建实体
//T_Customer customer = new T_Customer();
//customer.ID = 9;
////3、将实体附加到上下文里面来进行管理
//dbFirst.T_Customer.Attach(customer);
////改动实体的状态
//dbFirst.ObjectStateManager.ChangeObjectState(customer, EntityState.Deleted);
////4、上下文操作数据库
//dbFirst.SaveChanges();
#endregion #region 改动实体
////1、创建訪问数据库的上下文对象
//DBFirstEntities dbFirst = new DBFirstEntities();
////2、改动对象
//T_Customer customer = new T_Customer();
//customer.ID = 4;
//customer.CusName = "用户4_改动后2";
////3、附加到数据库
//dbFirst.T_Customer.AddObject(customer);
////改动对象状态
//dbFirst.ObjectStateManager.ChangeObjectState(customer, EntityState.Modified);
////4、上下文更新数据库
//dbFirst.SaveChanges();
#endregion #region 查询
DBFirstEntities dbFirst = new DBFirstEntities(); foreach (var item in dbFirst.T_Customer)
{
Console.WriteLine(string.Format("ID:{0} Name:{1}",item.ID,item.CusName));
}
#region linq表达式
T_Customer cs = (from customer in dbFirst.T_Customer where customer.ID == 2 select customer).SingleOrDefault();
Console.WriteLine("ID:{0} Name:{1}",cs.ID,cs.CusName);
#endregion #endregion Console.ReadKey();
}
}
}

总结

EF的使用大致能够分为:DBFirst(数据库为中心)和ModelFirst(实体为中心),以上是DBFirst型号。至于ModelFirst。你可以搜索一下。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Entity Framework基金会的更多相关文章

  1. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  2. Entity Framework Core 1.1 升级通告

    原文地址:https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-entity-framework-core-1-1/ 翻译:杨晓东 ...

  3. Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制

    将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...

  4. 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)

    前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...

  5. 来,给Entity Framework热热身

    先来看一下Entity Framework缓慢的初始化速度给我们更新程序带来的一种痛苦. 我们手动更新程序时通常的操作步骤如下: 1)把Web服务器从负载均衡中摘下来 2)更新程序 3)预热(发出一个 ...

  6. 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)

    前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...

  7. Entity Framework教程(第二版)

    源起 很多年前刚毕业那阵写过一篇关于Entity Framework的文章,没发首页却得到100+的推荐.可能是当时Entity Framework刚刚发布介绍EF的文章比较少.一晃这么多年过去了,E ...

  8. Entity Framework 6 Recipes 2nd Edition 译 -> 目录 -持续更新

    因为看了<Entity Framework 6 Recipes 2nd Edition>这本书前面8章的翻译,感谢china_fucan. 从第九章开始,我是边看边译的,没有通读,加之英语 ...

  9. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点

    在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...

随机推荐

  1. php定界符 <<< 的作用及使用注意事项

    按照原样输出,包括换行符.特殊字符等 任何特殊字符都不需要转义,比如双引号.单引号,它会按照原样输出 像在双引号字符串中一样使用php的变量输出 定界符<<<,当需要输出大段文本时, ...

  2. JAVA GUI学习 - JSplitPane分屏组件学习

    public class JSplitPaneKnow extends JFrame { JSplitPane jSplitPane; JPanel jPanelRed; JPanel jPanelB ...

  3. debian安装vld来查看Opcode,PHP调优。

    一: 我的环境: Debian 7 (wheezy)  x64 PHP 5.4.4-14 (apt-get 而来) Apache/2.2.22 (同上,非源码编译) 二 :安装vld. (# 代表是r ...

  4. java集群

    java集群 分类: java学习2011-05-12 09:12 7531人阅读 评论(9) 收藏 举报 java服务器负载均衡ejb集群数据库 序言 越来越多的关键应用运行在J2EE(Java 2 ...

  5. r语言之散点图类型type参数

    type参数用来控制所生成散点图的类型,有如下几个选项: type=“p”表示绘制单独的点 type=“l”表示绘制点连成的折线 type=“b”表示有线连接的点 type=“o”表示将点绘在线上 t ...

  6. Hadoop_Lucene

    http://codelife.me/blog/2012/11/03/jackson-polymorphic-deserialization/ http://itindex.net/blog/2012 ...

  7. 【学习】leader特别忙工作到晚上11点左右,组员7点左右下班了,作为leader怎么办?

    Ø  leader先将自己做的事情罗列出来,选出不属于leader当前职责的工作内容. Ø  将不属于leader职责内容的部分授权给组员(承担更多的责任,职责). Ø  授权时,先考察组员的能力和了 ...

  8. Collection用法

    Queue接口与List.Set同一级别,都是继承了Collection接口.LinkedList实现了Queue接 口.在队列这种数据结构中,最先插入的元素将是最先被删除的元素:反之最后插入的元素将 ...

  9. asp.net插入sql server 中文乱码问题解决方案

    创建数据库的代码---创建promary表 create table promary ( proID int primary key, proName varchar(50) not null ) 出 ...

  10. haproxy 访问www.zjdev.com 自动跳转到appserver_8001 对应的nginx

    # # acl zjdev_7_req hdr_beg(host) -i www.zjdev.com # use_backend appserver_8001 if zjdev_7_req