前两天同事发给我一个连接地址:实体框架高级应用之动态过滤 EntityFramework DynamicFilters为什么会找到动态过滤的内容,是源于前段时间,我们想做一个个人blog

后端用.NET CORE 做成可以跨平台的服务,前端用 react +redux

我们现在熟悉rafy框架的开发模式,关于Rafy可以参考 哲学驱动设计 - 胡庆访

但是rafy不目前不支持跨平台,所以后端我们就采用了EF Core+UOW 模式

什么是工作单元,我也不懂,第一次听说这个名词,虽然工作了几年了,现在自己就是这么小白 ,然后就去网上查找Unit of Work

When you're pulling data in and out of a database, it's important to keep track of what you've changed; otherwise, that data won't be written back into the database. Similarly you have to insert new objects you create and remove any objects you delete.

You can change the database with each change to your object model, but this can lead to lots of very small database calls, which ends up being very slow. Furthermore it requires you to have a transaction open for the whole interaction, which is impractical if you have a business transaction that spans multiple requests. The situation is even worse if you need to keep track of the objects you've read so you can avoid inconsistent reads.

A Unit of Work keeps track of everything you do during a business transaction that can affect the database. When you're done, it figures out everything that needs to be done to alter the database as a result of your work.

个人blog博客后端采用的ef+uow 前两天同事发过来实体框架高级应用之动态过滤 EntityFramework DynamicFilters 这个打开看,看完之后。发现这个只有不跨平台的EF DynamicFilters 那跨平台的有没有呢,网上找了一下,没有找到

就把那个源代码给下载了下来,下载地址:

https://github.com/jcachat/EntityFramework.DynamicFilters.git

打开之后界面如下:

生成解决方案的时候,报了两个错误

第一个是:nuget包无法还原 项目

DynamicFiltersTests 下的EntityFramework version="6.1.2" 打开本地的包去找发现没有,但是看到有一个6.1.1的包 就把6.1.2改成了6.1.1 暂时可以用了,后来再查的蚨,发现当时是网络有问题,下载不了内容,所以显示包还原失败,现在网络修好了就可以还原了

第二个是:EntityFramework.DynamicFilters 这个项目无法生成dll debug  release下死活就没有生成,去网上查了一下 vs生成不了dll 发现是framework 的版本引用不一致导致的,修改4.0

改为

再次编译就都通过了:

看别人写的代码的时候,习惯不好,一上来就习惯看代码里面类和类之间的引用关系,思考为什么要这么写,方法不正确,所以效率不高,如果有人引导式的阅读,看哪里不懂就像有个老师在身边就好了,这样随时可以讨教,但是源代码,大多时候,只有代码和文档

那要怎么看,我总结了一下觉得目前我了解到的方式

第一看:看说明文档

说明文档里面,会把对代码的实用方式介绍的很清楚,当然这是很正规的文档

第二看:实用示例

这个会告诉我们程序的常规入口,在哪里,为什么要找入口,找入口就像串珠子的线

找到这根线,才能把握主次,有轻有重,知道为什么这么设计

第三看:单元测试

单元测试,是一些很细的点的测试,能保证开发人员写的模块的健壮和稳定 同时对于阅读单元测试的其他人员,也能找到程序的使用方式,更快的用起来

第四看:看源码对外公布的接口,接口体现出来,对外交互的能力

第五看:画代码的时序图,什么是时序图

时序图

这样一步步下来,明白了作者的设计意图,知其然,知其所以然,然后才会有大的提升学到其他更多的东西,当能够把别人写的东西,像改自己的东西一样了然于胸的时候,才会以不变应万变。

读EntityFramework.DynamicFilters源码_心得_整体了解01的更多相关文章

  1. 读EntityFramework.DynamicFilters源码_心得_设计思想_04

    前几次,我们从说明文档,示例,单元测试了解了怎么用这个动态过滤器,那么如果仅仅是为了实现目的,知道怎么用就可以完成相应的功能开发,但我还想了解的问题是 作者是怎么将动态过滤器与EF结合的 有哪些设计思 ...

  2. 读EntityFramework.DynamicFilters源码_心得_单元测试03

    上个星期我们只是显示了一个示例,怎么在EF的框架内,注入我们拓展的动态过滤器 第一步:安装EntityFramework.DynamicFilters 第二步:重写OnModelCreating方法 ...

  3. 读EntityFramework.DynamicFilters源码_心得_示例演示02

    上次对EntityFramework.DynamicFilters整体的项目结构有了一个认识,这次我们就通过阅读说明文档,示例项目,和单元测试,来动手构建一个我们的体验项目,通过对动态过滤器的使用,使 ...

  4. Zookeeper_阅读源码第一步_在 IDE 里启动 zkServer(集群版)

    上篇文章Zookeeper_阅读源码第一步_在 IDE 里启动 zkServer(单机版)讲了在 idea 里以单机的方式启动zookeeper,这篇介绍一下以集群的方式启动. 集群方式启动,才会真正 ...

  5. Java 源码学习线路————_先JDK工具包集合_再core包,也就是String、StringBuffer等_Java IO类库

    http://www.iteye.com/topic/1113732 原则网址 Java源码初接触 如果你进行过一年左右的开发,喜欢用eclipse的debug功能.好了,你现在就有阅读源码的技术基础 ...

  6. Java并发指南10:Java 读写锁 ReentrantReadWriteLock 源码分析

    Java 读写锁 ReentrantReadWriteLock 源码分析 转自:https://www.javadoop.com/post/reentrant-read-write-lock#toc5 ...

  7. 如何读懂Framework源码?如何从应用深入到Framework?

    如何读懂Framework源码? 首先,我也是一个应用层开发者,我想大部分有"如何读懂Framework源码?"这个疑问的,应该大都是应用层开发. 那对于我们来讲,读源码最大的问题 ...

  8. 读源码【读mybatis的源码的思路】

    ✿ 需要掌握的编译器知识 ★ 编译器为eclipse为例子 调试准备工作(步骤:Window -> Show View ->...): □ 打开调试断点Breakpoint: □ 打开变量 ...

  9. (转)linux内存源码分析 - 内存回收(整体流程)

    http://www.cnblogs.com/tolimit/p/5435068.html------------linux内存源码分析 - 内存回收(整体流程) 概述 当linux系统内存压力就大时 ...

随机推荐

  1. 洛谷P5265 【模板】多项式反三角函数

    题面 传送门 题解 我数学好像学得太差了 据说根据反三角函数求导公式 \[{d\over dx}\arcsin x={1\over \sqrt{1-x^2}}\] \[{d\over dx}\arct ...

  2. 基于DALN方案C/S架构运用

    今天闲来无事,看到笔记本的蓝牙设备想着:可不可以实现电脑端播放手机端的音频. 刚刚开始想着基于蓝牙,尝试多次无解(主要原因是没有找到支持此功能的软件) 最后:有朋友建议可以研究下DALN方案解决这个需 ...

  3. orange

    选型:使用orange系统 orange与kong的比较1.kong整体代码上较凌乱, orange相对较有条理2.kong本身不支持后台管理页面,只能通过api方式增,删,改plugin, oran ...

  4. __getitem__

    如果在类中定义了__getitem__()方法,那么他的实例对象(假设为P)就可以这样P[key]取值.当实例对象做P[key]运算时,就会调用类中的__getitem__()方法.

  5. CSS 两个行内块元素,宽度相加刚好等于父盒子容器的元素,但第二个元素掉在第二行解决办法

    我们可以发现:两个行内块元素,宽度相加刚好等于父盒子容器的元素,但第二个元素掉在第二行,这是什么问题呢? 我们先来看一下效果: <!DOCTYPE html> <html lang= ...

  6. centOS7虚拟机设置固定IP

      说明:想要达到的如下效果, 1.笔记本主机IP为设置自动获取,不管什么情况下,不受虚拟机影响,只要连接外网就可以正常上网: 2.只要笔记本主机可以正常访问外网,启动虚拟机中的CentOS 7系统就 ...

  7. HTML中title前面小图标和网站收藏现实的图标

    网站上的logo实际上是一个“favicon.ico”图片.实现步骤:第一步:制作favicon.ico,大小为16*16毫米:第二步:将“favicon.ico”放到项目的根路径下. 第三步:在所有 ...

  8. vim编辑器基本操作及文件权限,sudo命令等介绍

    一:vim 操作命令,在命令模式下操作 pageup 往上翻页 pagedown 往下翻页 H 移动到屏幕首行 gg 移动光标到文档的首行 前面加数字n表示移动到n行内容 G 移动到文档最后一行/查找 ...

  9. [Alpha]Scrum Meeting#1

    github 本次会议项目由PM召开,时间为4月1日晚上10点30分 时长10分钟 任务表格 人员 昨日工作 下一步工作 木鬼 - 撰写初版技术规格说明书(issue#1) - 撰写初版功能规格说明书 ...

  10. L2-2 小字辈 (25 分)

    本题给定一个庞大家族的家谱,要请你给出最小一辈的名单. 输入格式: 输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号.随后第二行 ...