EntityFramework用法探索系列

  • (一)DatabaseFirst
  • (二)CodeFirst
  • (三)CodeFirst流畅API
  • (四)Repository和UnitOfWork
  • (五)引入Unity
  • (六)静态Repository
  • (七)线程安全实践
  • (八)事务处理
  • AutoFac和NHibernate

通过NuGet安装Autofac.WebApi。(当然要先安装Autofac.dll)。PM > Install-Package Autofac.WebApi

在Application_Start里调用Bootstrapper.Run()。

  1. protectedvoid Application_Start()
  2. {
  3. AreaRegistration.RegisterAllAreas();
  4. RegisterGlobalFilters(GlobalFilters.Filters);
  5. RegisterRoutes(RouteTable.Routes);
  6. BundleTable.Bundles.RegisterTemplateBundles();
  7. //Call Autofac DI configurations
  8. Bootstrapper.Run();
  9. }

UnitOfWork的主要用途:

(1)管理事务 。

(2)实现数据的插入,删除和更新。

(3)防止重复更新。通过对保持对象的跟踪,防止多次提交数据库操作,提高性能。

Repository

Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects

Repository模式主要用于实现业务层和数据访问层的隔离。这样做的好处是客户端代码(此处指业务层的service代码)不依赖于具体数据存储的实现。并且Repository只需要暴露必须的数据访问给Service层。

下面我们来看利用这两个模式针对我们的需求做的一个简单的实现(使用Entity Framework中ObjectContext 来实现简单的UnitOfWork的功能)

这些类之间的关系比较简单,

  1. OrderService创建一个新的OrderEntities实例来模拟和启动UnitOfWork
  2. UnitOfWork实例要传递给2个repository (CustomerRepository和OrderRepository)
  3. OrderService的实现依赖于两个repository的公开方法.
  4. UnitOfWork模式是通过EF中的object context来实现的
  5. Repository的功能封装了EF中的object context的基本CRUD操作
  6. 整个设计利用了代理设计模式(proxy design pattern)
  7. OrderService不存在也不应该对objectConext的直接引用和调用,在上图中我们也可以看到这点(在代码中我们的确做了一个Object Context的实例化,以后会解决这个问题)

.net EntityFramework用法探索系列 1的更多相关文章

  1. EntityFramework用法探索(八)事务处理

    使用 前文中描述的Retail示例 ,在Customer对象的Mapping中设置Name属性:我们构造一个有效的Customer对象,再构造一个无效的Name属性为空的对象. DomainModel ...

  2. Entityframework Code First 系列之数据注释

    上一篇<Entityframework Code First 系列之项目搭建>讲了搭建一个Code First的控制台项目.里面有一些内容并没有扩展出来讲,因为篇幅有限.这篇针对上面内容中 ...

  3. EntityFramework Core 学习系列(一)Creating Model

    EntityFramework Core 学习系列(一)Creating Model Getting Started 使用Command Line 来添加 Package  dotnet add pa ...

  4. 《PHP内核探索系列文章》系列分享专栏

    <PHP内核探索系列文章>已整理成PDF文档,点击可直接下载至本地查阅 简介 PHP内核探索系列文章收藏夹收藏有关PHP内核方面的知识的文章,对PHP高级进阶的朋友提供PHP内核方面的知识 ...

  5. PHP内核探索之变量(6)- 后续内核探索系列大纲备忘

    年前因为工作比较饱和,现在又忙着换工作的事情,基本停止了对博文的更新.后续的博文,还是慢慢补上吧. 为了不至于过于发散,先搞个未成形的大纲,如下: PHP内核探索之变量  不平凡的字符串 PHP内核探 ...

  6. Entityframework Code First 系列之项目搭建

    Entityframework(以下简称EF)是微软推出的一个ORM(Object Relational Mapping)框架. 优缺点 优点: 易上手,语法简单,查询容易 更新快,不断补足 缺点: ...

  7. Spring Boot 探索系列 - 自动化配置篇

    26. Logging Prev  Part IV. Spring Boot features  Next 26. Logging Spring Boot uses Commons Logging f ...

  8. 边缘计算在物联网(IoT)当中的运用「物联网架构探索系列」

    这里记录的是我对物联网架构的学习.探索和思考,希望对你有所启发…… 边缘计算是指在靠近物或数据源头的一侧,采用网络.计算.存储.应用核心能力为一体的开放平台,就近提供最近端服务.其应用程序在边缘侧发起 ...

  9. [转]HTTPS网络流量解密方法探索系列(一)

    前言 分析网络流量总是绕不开HTTPS,因其广泛使用甚至是强制使用逐渐被大众熟知,在保证其安全的同时也提高了对流量进行研究的难度.目前解析HTTPS协议的文章很多,有很多不错的文章可以带着入门,老实说 ...

随机推荐

  1. Base适配器

    package com.baidu.base; import java.util.List; import com.baidu.vo.Mydata;import com.bwie.yd.R;impor ...

  2. Jlink V7在MDK下使用Cortex-M3-Jlink模式开发STM32的说明

    Jlink V7在MDK下使用Cortex-M3-Jlink模式开发STM32的说明   开发环境:STM32F103RB(128K Flash 20K RAM)+MDK3.50+JLINK V7(v ...

  3. 第四课,T语言运算符(版本5.0)

    TC综合开发工具里支持了丰富的运算符,这样也要求大家对运算符的知识必须了解清楚,否则出现错误还不知道问题所在下面就为大家说说运算符的优先级与各个运算符含义 注意: 优先级代表同一表达式中运算符的运算顺 ...

  4. c#部分---用函数的四种格式做一元二次方程

    格式一:(无参无返) public void fangcheng() { Console.WriteLine("请输入a的值"); double a = int.Parse(Con ...

  5. Hibernate——property的access属性

    public class Customer implements Serializable { private static final long serialVersionUID = 1L;     ...

  6. Codeforces Round #128 (Div. 2)

    A. Two Problems 分两题的过题情况讨论,并且数值均不大,暴力枚举. B. Game on Paper 每次给格子染色后,考虑当前格子在正方形中的位置,然后判断对应的正方形是否都已染色. ...

  7. 作业:用HTML制作邮箱登陆界面

    <body leftmargin="200" rightmargin="200"> <font size="45" > ...

  8. poj1420 拓扑序

    题意:给出一个表格,一部分单元格是给定的数字,而另一部分单元格则是一个式子,表示是其他一些单元格的和,让你输出最后计算出的所有格子的数. 因为有些格子需要其他格子先计算出来,所以计算顺序是按照拓扑序的 ...

  9. Hadoop SPARK 环境搭建

    http://www.linuxidc.com/Linux/2015-02/113486.htm http://www.cnblogs.com/lijingchn/p/5574476.html htt ...

  10. win10 phpStudy 80端口被占用

    原因是win8下系统默认占用80端口,导致apache无法打开.解决方法: 1.以管理员权限运行c:windowssystem32cmd.exe :2.C:WINDOWSsystem32>net ...