当前位置: 首页 > news >正文

Entity Framework基金会

概要

       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
)

程序代码





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。你可以搜索一下。

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

相关文章:

  • 【QQ技术】群文件报毒怎样下载?~ 变相绕过QQ复杂检验过程
  • iOS 使用ALAssetsLibrary保存图片到本地
  • android studio导入 so 文件。
  • TeeChart的最小步长和最大步长
  • ORA-00001: unique constraint (...) violated并不一定是数据冲突
  • 关于touchTouch.jquery.js浏览图片重复的问题
  • Android中的内部类引起的内存泄露
  • XMemcached实例及与spring的集成
  • JAVA8
  • classpath对获取配置文件的影响
  • Delphi XE里面 SharedActivityContext 提示错误
  • Android 带你从源码的角度解析Scroller的滚动实现原理
  • ODI调用WebService----OdiInvokeWebService
  • OK335xS GPMC nand device register hacking
  • WebService的缓存机制
  • .pyc 想到的一些问题
  • 10个确保微服务与容器安全的最佳实践
  • Java Agent 学习笔记
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • node入门
  • React的组件模式
  • spring-boot List转Page
  • 番外篇1:在Windows环境下安装JDK
  • 复杂数据处理
  • 前端之Sass/Scss实战笔记
  • 数据可视化之 Sankey 桑基图的实现
  • 一道面试题引发的“血案”
  • 移动端 h5开发相关内容总结(三)
  • 移动端解决方案学习记录
  • 因为阿里,他们成了“杭漂”
  • 再次简单明了总结flex布局,一看就懂...
  • 正则学习笔记
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 移动端高清、多屏适配方案
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • "无招胜有招"nbsp;史上最全的互…
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #pragma data_seg 共享数据区(转)
  • $$$$GB2312-80区位编码表$$$$
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (第二周)效能测试
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转载)(官方)UE4--图像编程----着色器开发
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net6使用Sejil可视化日志
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NET中两种OCR方式对比
  • [.NET]桃源网络硬盘 v7.4