前两天同事发给我一个连接地址:实体框架高级应用之动态过滤 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. Python——深拷贝和浅拷贝

    深拷贝.浅拷贝 1. 浅拷贝 浅拷贝是对于一个对象的顶层拷贝 import copy a = [[1, 2], 3] b = copy.copy(a) print(id(a)) print(id(b) ...

  2. Python实现——二层BP神经网络

    2019/4/23更新 下文中的正确率极高是建立在仅有50组训练数据的基础上的,十分不可靠.建议使用提供的另一个生成训练集的generate_all函数,能产生所有可能结果,更加可靠. 2019/4/ ...

  3. 基础篇:4.2)规范化:3d软件工程图纸用模板

    本章目的:分享一些国标标准模板,方便作图时使用 这篇博文的内容作者会定时的更新 1.工程图模板 drawing template 定义 三维机械设计软件中的一种文件类型.通过标准化定制和使用该文件,可 ...

  4. c++ 用 0x3f3f3f3f 设定最大int值的优点

    在许多算法中都要用到一个常量来表示最大值,例如:寻找一个最小数,就要先设定一个值a,如果比a小,a就等于这个数:再如,最短路径中基本的松弛操作: 0 在c++中可以用memset() 来初始化数组成最 ...

  5. JAVA中 this关键字的用法

    this 在类中就是代表当前对象,可以通过 this 关键字完成当前对象的成员属性.成员方法和构造方法的调用. 那么何时用 this? 当在定义类中的方法时,如果需要调用该类对象,就可以用 this来 ...

  6. python2.x提示这个错误:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position

    查了好久下面这个方法可用: 发现应该是因为python2.x的默认编码是ascii,而代码中可能由utf-8的字符导致,解决方法是设置utf-8. 找到出错的文件,在import后增加下面几行: #! ...

  7. Canvas 同心圆旋转示例解析

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. es第十篇:Elasticsearch for Apache Hadoop

    es for apache hadoop(elasticsearch-hadoop.jar)允许hadoop作业(mapreduce.hive.pig.cascading.spark)与es交互. A ...

  9. linux 内存介绍

    linux用free -m 查看linux内存使用情况 具体参数如下: Mem:内存的使用情况总览表. totel:机器总的物理内存 单位为:M used:用掉的内存. free:空闲的物理内存. 物 ...

  10. android 报错: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/animation/AnimatorCompatHelper;

    在使用SmartRefreshLayout时,报 java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/a ...