Shadow Properties之美(一)【Microsoft Entity Framework Core随笔】

最近在做公司的项目的时候,开始把部分程序迁移到EF Core,然后有了一些感触,趁着还没忘却,还是先记录下来。

EF Core还在成长中,我写这个的时候,版本是2.2。如果对着已有的EF 5/6来说,还有很多功能要迎头赶上的,所以这个也是为什么在.net core 3的标准中,计划要支持EF 6(这个其实是一次性买卖),就是想让大家可以先把.net Core (EF6)用起来,让EF Core先缓口气,等它成长足够了,再迁移到.net Core (EF Core)这样的组合。

即便如此,现在版本的EF Core已经有好多不少的闪亮之处(当然也有一些会因为自己没学好而误会了它的坑)。不论是闪亮点,还是坑,我有时间的话,会缓缓道来。

Shadow Properties这个特性很好,值得先拿出来说一下。但是博客本来就不适宜写得长,不然就不适合碎片阅读。所以我会把它分开来写。而且我还可能会比较啰嗦,有骗字数的嫌疑。

Shadow properties are properties that are not defined in your .NET entity class but are defined for that entity type in the EF Core model. The value and state of these properties is maintained purely in the Change Tracker. (https://docs.microsoft.com/en-us/ef/core/modeling/shadow-properties)

简单地说,隐藏属性 (Shadow Properties),就是那些逻辑设计里面没有的,但是物理设计里面却要有的属性。逻辑设计 vs. 物理设计,是做面向对象编程的攻城狮,都需要面对的问题。例如,那些数据库自增长的ID,审计类字段,还有例如做数据库订阅所需要的时间戳等等。很绕口,让我说人话,就是我们的business class(业务类),是不会包括那些只对照某数据库,或者中间件才冒出来的神马ID之类的属性,而我们却可以在EF Core层面,搞定这些ID的安置方式,而不需要另外再弄一个新的EF class。

有了这个,我们就可以保持逻辑设计的干净,也可以省了再去多弄一个EF Class。或者干脆就着EF Class来细细捣弄(为了继续保持逻辑层的干净)。后述的两种手法,在我们灵活运用EF 5/6的时候,已经屡见不鲜了。

简单举个几个栗子(边幅所限,本篇先来一个个简单的,后面的继续举拖沓的栗子,继续骗字数)。例如,我们会在数据库有一些 LastUpdateBy (记录最后修改者/兼顾新增此记录建立者)、LastUpdateDate(记录最后改动的日期和时间)、CreatedDate(新增此记录的日期和时间)等等,提供简单审计记录功能的字段。但是,我们的Class里面,真心不想要这些属性。这个时候,我们可以继续保持原有business class不变。而在我们的DBContext class的OnModuleCreating方法中,针对某个需要有上述审计字段的Entity,加上这些Shadow Properties。下面的代码片段的例子,只支持UpdateDate和UpdateBy,CreateDate请自行脑补哈(Tips: EntityState.Added 状态下才更新此属性的值)。

640?wx_fmt=png

 很简单对吧?只需要偷偷地在自己的DBContext里面捣弄一下,根本不需要让上层建筑知道那么多,我们就支持了仅在数据表里面才有的审计类字段。

接下来,下一篇,会举一个更啰嗦的栗子。解释一下,为什么我们的business class,不应该有那些由于物理设计(落地选型)所带出来的各式各样的神马ID,以及怎么用Shadow Properties来支持。但是因为这个涉及到asp.net core web api的相应改动,所以值得另开一个帖子来骗字数了。


原文地址:

https://www.cnblogs.com/fatkent/p/EFCore_ShadowProperties_1.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF1413C Perform Easily(two pointers)

解析 巧夺天工 可以说是把two pointers玩明白了 把所有的可能减出来的结果升序排列一下 然后一个选取区间合法当且仅当这个区间含有1-n所有数的至少一个可能的差 然后就可以two pointers了 #include<bits/stdc.h> const int N2e5100; const int mod1e97; #define ll lon…

CF1039E-Summer Oenothera Exhibition【LCT,根号分治】

正题 题目链接:https://www.luogu.com.cn/problem/CF1039E 题目大意 给出nnn个数的序列&#xff0c;mmm次询问至少将这个序列分成多少段才能满足每一段的和不超过w−qiw-q_iw−qi​。 1≤n,m≤105,1≤w,ai≤1091\leq n,m\leq 10^5,1\leq w,a_i\leq 10^91≤n,m≤105,1≤w,ai​…

E - Another Postman Problem FZU - 2038

E - Another Postman Problem FZU - 2038 题意&#xff1a; n个点通过n-1个边两两相连&#xff0c;每个边有权值&#xff0c;求对于每个点到其他点的距离和的总和 题解&#xff1a; 我们以下图中的1-2这条边为例子&#xff0c;1-2这条边一共计算了几次&#xff1f; 我们现在…

CF1034E Little C Loves 3 III(神仙构造+FWT_OR卷积)

title 题目 solution 先说很神仙的结论构造&#xff1a;对于aia_iai​&#xff0c;aivi∗4pop_count(i)a_iv_i*4^{pop\_count(i)}ai​vi​∗4pop_count(i)&#xff0c;bbb同理 ci∑j∣kiai∗bjc_i\sum_{j|ki}a_i*b_jci​∑j∣ki​ai​∗bj​&#xff0c;则ansi≡ci4pop_coun…

ASP.NET Core 3.0 项目开始“瘦身”

新的 ASP.NET Core 项目使用名为Microsoft.AspNetCore.App的综合包。该包也可以称为“ASP.NET Core 共享框架”&#xff0c;其背后的基本思想是&#xff0c;包括一个典型的应用程序所需要的所有东西。但是&#xff0c;如果看看该包的依赖项&#xff0c;对“需要”的定义看起来相…

CF1415D:XOR-gun(异或)

这就是CF 解析 这题真的是… …很妙 qwq 考虑到&#xff0c;如果相邻的连续三个二进制最高位相同&#xff0c;那么把后两个异或一下就可以打成目标 而如果不存在连续打三个二进制最高位相同的数&#xff0c;由于ai≤109a_i\leq10^9ai​≤109&#xff0c;所以n必然不超过60 前…

CF1369F-BareLee【博弈论,SG函数】

正题 题目链接:https://www.luogu.com.cn/problem/CF1369F 题目大意 TTT次游戏&#xff0c;每次给出一个sss和ttt&#xff0c;两个人轮流操作&#xff0c;可以让ss1ss1ss1或者ss2ss\times 2ss2&#xff0c;如果s>ts>ts>t的话那个人就输了。 每次输的人将作为下一次的…

D - Maximum Value Problem FZU - 2037

D - Maximum Value Problem FZU - 2037 题意&#xff1b; 这个序列[1&#xff0c;3&#xff0c;2&#xff0c;4]&#xff0c;maxx0.如果将maxx赋值为最大值需要3次&#xff0c;第一次为maxx1&#xff0c;第二次maxx3&#xff0c;第三次maxx4 给你一个n&#xff0c;求n全排列的…

一个.NET Core开发者的Linux入门学习笔记

用.NET Core开发也有一段时间了&#xff0c;但是由于工作原因一直都是在Windows系统上进行的开发&#xff0c;一直想学习Linux然后把.NET Core开发的程序跑在Linux上&#xff0c;然后把心得体会记录一下发布再博客园&#xff0c;奈何拖延症泛滥&#xff0c;所以只写过一篇《Cen…

CF914G Sum the Fibonacci(FWT模板+子集卷积)

title 题目 solution (sa∣sb)&sc&(sd⊕se)2i,i∈Z;sa&sb0(s_a|s_b)\&s_c\&(s_d⊕s_e)2^i,i∈Z;s_a\&s_b0(sa​∣sb​)&sc​&(sd​⊕se​)2i,i∈Z;sa​&sb​0 令isa∣sb,jsc,dsd⊕seis_a|s_b,js_c,ds_d⊕s_eisa​∣sb​,jsc​,dsd​⊕se…

CF1415E New Game Plus(贪心)

解析 把题目标签写在数据范围上的一道题 由于k过大&#xff0c;显然无法dp 那就只能贪了 一开始被完全带跑偏了… 想的是把序列降序排列然后从后往前划分… 这个思路能很简单的写出nkdp 然后就卡住了… 算看了一半题解吧 看到第一段“考虑分成k组”后退出来了 有了这个线头后…

loj#6518-「雅礼集训 2018 Day11」序列【整体二分,dp,线段树】

正题 题目链接:https://loj.ac/p/6518 题目大意 一个长度为nnn的序列aaa&#xff0c;你可以花费111的代价让一个数111或者−1-1−1&#xff0c;给出mmm个限制形如第kkk个数要是区间[l,r][l,r][l,r]的最大/最小值。 求满足所有限制的最小代价 1≤n≤5000,1≤ai≤1051\leq n\l…

一二三系列之状压DP——Max Correct Set(一)Neko Rules the Catniverse (Large Version)(二)Make It Ascending(三)

文章目录一&#xff1a;CF1463F二&#xff1a;CF1152F2三&#xff1a;CF1342F一&#xff1a;CF1463F Max Correct Set 有一个结论&#xff1a;以xyxyxy为周期排列填充一定是不劣于最后的答案的 令pxy,rn%ppxy,rn\%ppxy,rn%p ⌊np⌋\lfloor\frac{n}{p}\rfloor⌊pn​⌋出现次数为…

C - Log Calculator FZU - 2036

C - Log Calculator FZU - 2036 题意&#xff1a; 已知a和b&#xff0c;满足alog2x&#xff0c;blog2y 求log2(xy) 题解&#xff1a; 因为alog2x&#xff0c;blog2y 所以x2a, yab log2(xy)log2(2a2b)log2(2b(12a-b))blog2(2a-b1) x>32时&#xff0c;blog2(2x1)xb 代码&…

实用帖 | 使用Visual Studio开发.NET Core推荐设置

Visual Studio 一直是.NET程序员的好伙伴&#xff0c;如今虽然.NET Core的开发可以用VSCode等其他环境&#xff0c;但VS依旧有强大的优势。今天来介绍下如何让VS用得更顺手的技能Here We Go!⛷基本配置首先要搞清楚的一点是&#xff0c;并不是所有版本的Visual Studio都支持.NE…

CF1654F-Minimal String Xoration【倍增】

正题 题目链接:https://www.luogu.com.cn/problem/CF1654F 题目大意 给出一个长度为2n2^n2n的字符串sss&#xff08;下标为0∼2n−10\sim 2^n-10∼2n−1&#xff09; 你要找到一个xxx满足tisixorxt_{i}s_{i\ xor\ x}ti​si xor x​&#xff0c;并且ttt的字典序最小。 1≤n≤…

P3642 [APIO2016]烟火表演(左偏树、函数)

解析 感觉是左偏树的神题了. 首先有一个比较显然的结论&#xff0c;一个合法的方案中&#xff0c;两个叶子到它们 lca\text{lca}lca 的距离必须相等. 考虑设计 dp\text{dp}dp &#xff1a; fi,xf_{i,x}fi,x​ 表示 iii 的子树中&#xff0c;所有叶子到它的距离为 xxx 的最小…

2011年全国大学生程序设计邀请赛(福州)

题号题目考点难度APassword table模拟签到BAxial symmetry计算几何代码题CLog Calculatorjava大数DMaximum Value Problem思维题EAnother Postman Problem思维题FPets二分图匹配模板题GTilingHChecker思维题角度很妙&#xff0c;值得多练练IThe Mad MathematicianJSocial Netwo…

概率与期望游戏地图

文章目录前言拾得宝典的玄灵大陆P2911P4316P6154P1297P6862参悟升级的三千界P1365P1850[CF]Crypto Lights打野刷野怪副本[AT-abc215G]Colorful Candies 2前言 其实从去年开始初次接触概率期望后&#xff0c;后面的考试几乎场场见到&#xff1b;而每次都只能敲最原始的暴力&…

.NET Core IdentityServer4实战 第一章-入门与API添加客户端凭据

内容&#xff1a;本文带大家使用IdentityServer4进行对API授权保护的基本策略作者&#xff1a;zara(张子浩) 欢迎分享&#xff0c;但需在文章鲜明处留下原文地址。本文将要讲述如何使用IdentityServer4对API授权保护以及如何携带Token进行访问受保护的API&#xff0c;通过HttpC…