博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
仓储repository概念
阅读量:4968 次
发布时间:2019-06-12

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

1.为什么要用仓储?(仓储有什么用)


1.1 解耦

为了解耦领域层与数据映射层的关系。

1.2 管理增删查改

仓储模式最大的优点就是所有的数据访问首先是通过仓库的,对仓库的增删改都不会立即提交到数据库,而只有当调用了仓库包裹器,这些增删改的操作才会一次提交到数据库。

2.仓储怎么实现?


2.1通过接口实现增删查改的类;

2.2实现层继承引入ORM;

博客园有很多例子,这里不一一例举。

3.通过EF实现仓储


因为EF本身即是按照repository来设计的。请看下面这行代码:

var db = new DemoDbContext();
这里的db即相当于是repository的包裹器。通过包裹器可以非常轻松的访问到其下的每一个repository,这也绝对是最简单的访问方式了,如:

db.Users....db.Products...

自己实现的repository还要通过IOC。

3.1 EF实现仓储

在EF中,DbSet即是定义的仓库,DbContext即是仓库包裹器。所有对DbSet的增删改都只有在调用了DbContext的SaveChanges之后才会提交到数据库。这样看,EF完全实现了Repository了。

3.2对应到Northwind项目

Northwind里其实也有仓储,只不过通过EF的Repository进行实现。

3.2.1定义仓库

INorthwindDbContext接口定义了仓库,如下:

public interface INorthwindDbContext    {        DbSet
Categories { get; set; } DbSet
Customers { get; set; } DbSet
Employees { get; set; } DbSet
EmployeeTerritories { get; set; } DbSet
OrderDetails { get; set; } DbSet
Orders { get; set; } DbSet
Products { get; set; } DbSet
Region { get; set; } DbSet
Shippers { get; set; } DbSet
Suppliers { get; set; } DbSet
Territories { get; set; } DbSet
Users { get; set; } Task
SaveChangesAsync(CancellationToken cancellationToken); }

3.2.2利用EFCore的Dbset中的增删查改方法对仓储进行操作

a. 增,删操作。

_context.Customers.Add(entity);_context.Customers.Remove(entity);

b. 改操作,改通过根据ID查询出来,将最新请求的request 进行逐个赋值。但是这很难达到通用性,以后每个仓库都需要进行类似Address,City,Company...的更改。

var entity = await _context.Customers .SingleOrDefaultAsync(c => c.CustomerId == request.Id, cancellationToken);                entity.Address = request.Address;                entity.City = request.City;                entity.CompanyName = request.CompanyName;                entity.ContactName = request.ContactName;                entity.ContactTitle = request.ContactTitle;                entity.Country = request.Country;                entity.Fax = request.Fax;                entity.Phone = request.Phone;                entity.PostalCode = request.PostalCode;

c. 查操作

var entity = await _context.Customers                .FindAsync(request.Id);

d. 一起提交操作

e. 仓库包裹器提交数据库

_context.SaveChangesAsync(cancellationToken);

用EF做仓库的缺点

1.无法解耦ORM;
2.更改数据的时候需要对每个仓库的字段进行一一对应。

QQ群技术讨论:20120449

转载于:https://www.cnblogs.com/JerryMouseLi/p/10791125.html

你可能感兴趣的文章
Sql语句里的递归查询(转)
查看>>
[JAVA]《Java 核心技术》(一)
查看>>
libevent机制
查看>>
rabbit ip登录
查看>>
呼叫器
查看>>
Hadoop Archives
查看>>
.Net基础篇_学习笔记_第六天_for循环语法_正序输出和倒序输出
查看>>
Java 十进制和十六制之间的转化(负数的处理)
查看>>
反射那些事儿——Java动态装载和反射技术
查看>>
Hive中的日志
查看>>
Wingdings 2 符号编码对照表
查看>>
SVN的标准目录结构:trunk、branches、tags
查看>>
Initializing Spring root WebApplicationContext
查看>>
在线CSS圆角生成器
查看>>
Java基础知识总结--反射
查看>>
python-----删除空文件夹
查看>>
camel
查看>>
传输层——TCP报文头介绍
查看>>
Linux内核超时检测
查看>>
集合栈计算机 (The SetStack Computer,ACM/ICPC NWERC 2006,UVa12096
查看>>