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

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

  • 相关阅读:
    代码阅读:结构与逻辑
    ReactiveCocoa 中 RACSignal 所有变换操作底层实现分析(上)
    大白话讲解Promise(一)
    ReactiveCocoa 中 RACSignal 是如何发送信号的
    The Future Of ReactiveCocoa by Justin Spahr-Summers
    reactive programming
    【转】iOS中流(Stream)的使用
    NSStream 流式思想
    Future模式 总结
    备忘
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4757190.html
Copyright © 2020-2023  润新知