博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于工作单元模式——工作单元模式与EF结合的使用
阅读量:5141 次
发布时间:2019-06-13

本文共 2178 字,大约阅读时间需要 7 分钟。

  工作单元模式往往和仓储模式一起使用,本篇文章讲到的是工作单元模式和仓储模式一起用来在ef外面包一层,其实EF本身就是工作单元模式和仓储模式使用的经典例子,其中DbContext就是工作单元,而每个DbSet就是每个仓储,只有DbContext可以进行持久化操作。

那么我们为什么还要在EF的外面再包一层对EF进行封装呢,有时候也是需要这样做的

根据需要我们可以把EF框架和业务逻辑分开以达到解耦的目的。便于以后在需要的时候用其他ORM框架代替EF。
另外,如果只使用仓储模式,那么我们就会在每个仓储中进行持久化操作。这样做往往是不合理的,
持久化的操作应当交给工作单元。

 代码如下(代码是从网上找的例子)

public class EventsController : Controller{    private readonly ApplicationDbContext _context;    private readonly UnitOfWork _unitOfWork;    public EventsController()    {        _context = new ApplicationDbContext();            _unitOfWork = new UnitOfWork(_context);    }    public ActionResult Details(int id)    {        var event = _unitOfWork.Events.GetEvent(id);        if (event == null)            return HttpNotFound();        var viewModel = new EventDetailsViewModel { Event = event };        return View("Details", viewModel);    }    [Authorize]    public ActionResult MyEvents()    {        var userId = User.Identity.GetUserId();        var events = _unitOfWork.Events.GetUpcomingEventsByArtist(userId);        return View(events);    }    [Authorize]    [HttpPost]    [ValidateAntiForgeryToken]    public ActionResult Create(EventFormViewModel viewModel)    {        if (!ModelState.IsValid)        {            viewModel.Genres = _unitOfWork.Genres.GetGenres();            return View("EventForm", viewModel);        }        var event = new Event        {            ArtistId = User.Identity.GetUserId(),            DateTime = viewModel.GetDateTime(),            GenreId = viewModel.Genre,            Venue = viewModel.Venue        };        _unitOfWork.Events.Add(event);        _unitOfWork.Complete();        return RedirectToAction("MyEvents", "Events");    }}
public class UnitOfWork{    private readonly ApplicationDbContext _context;    public EventRepository Events { get; private set; }    public GenreRepository Genres { get; private set; }    public UnitOfWork(ApplicationDbContext context)    {        _context = context;        Events = new EventRepository(context);        Genres = new GenreRepository(context);    }    public void Complete()    {        _context.SaveChanges();    }}

 

转载于:https://www.cnblogs.com/dayang12525/p/10836697.html

你可能感兴趣的文章
[bzoj2002][Hnoi2010]Bounce弹飞绵羊_LCT
查看>>
我的技术历程(下)
查看>>
朱晔的互联网架构实践心得S2E2:写业务代码最容易掉的10种坑
查看>>
[实战]3天让Web应用承载拓展1000倍
查看>>
做一个开源的小程序登录模块组件(token)
查看>>
中国六大最忙和六大最懒城市
查看>>
并发编程之死锁
查看>>
Ubuntu 下 su:authentication failure的解决办法
查看>>
Git 使用ssh密钥
查看>>
四叶草与动感线条背景矢量图
查看>>
汇编语言第一章 基础知识 总结
查看>>
商城项目基本框架开源
查看>>
PowerDesigner 15学习笔记:十大模型及五大分类
查看>>
passport 自动取密码
查看>>
Android硬件抽象层(HAL)深入剖析(二)
查看>>
物联仓储系统ZigBee组网原理
查看>>
Linux下Nginx+Tomcat整合的安装与配置
查看>>
linux命令之let、expr
查看>>
Asp.Net Url 传值出现乱码的解决方法
查看>>
JavaScript常用检测脚本(正则表达式)
查看>>