网站开发网站说明怎么写,html5 动态效果 手机网站,网站备案 更改ip,展示照片的网站刘德华 有一首歌叫《马桶》#xff0c;其中有一句歌词是#xff1a;每一个马桶都是英雄。EFCore也有一个英雄#xff0c;在幕后默默地任劳任怨。它就叫 支持字段 (Backing Fields):中文版#xff1a;https://docs.microsoft.com/zh-cn/ef/core/modeling/backin… 刘德华 有一首歌叫《马桶》其中有一句歌词是每一个马桶都是英雄。EFCore也有一个英雄在幕后默默地任劳任怨。它就叫 支持字段 (Backing Fields):中文版https://docs.microsoft.com/zh-cn/ef/core/modeling/backing-field支持字段允许 EF 读取和/或写入字段而不是一个属性。 在类中的封装用于限制的使用和/或增强围绕访问数据的语义由应用程序代码但值应进行读取和/或写入到数据库而无需使用这些限制时这很有用 /增强功能。英文版https://docs.microsoft.com/en-us/ef/core/modeling/backing-fieldBacking fields allow EF to read and/or write to a field rather than a property. This can be useful when encapsulation in the class is being used to restrict the use of and/or enhance the semantics around access to the data by application code, but the value should be read from and/or written to the database without using those restrictions/enhancements.它可以用于什么场景呢简单地说当我们没有特别地指定类的属性与数据表字段名的话在装载 数据表的内容 到 类 的时候EFCore会直接地找到属性名对应的数据表字段名然后把字段的内容赋值到类属性中留意我说的是 类 的 属性 Property而不是 字段 Field。但是万一我们不想EFCore这样做呢例如以下的俩场景- 场景一我们有一个User类它有一个叫Password的属性由于是单向加密所以希望每次对它赋值的时候它都自动做MD5加密然后对它读取的时候它都只返回MD5加密后的内容而不是加密前的内容- 场景二某些金融应用由于需要支持不同货币品种的小数点后位数精度的要求金额在数据库储存的时候或者和内部其他系统做数据交换的时候通常极有可能是近似于整表导出了都是整型。然后只有在人机对话的界面才把进行小数点运算后的结果显示出来。至于货币品种除了世界各国的货币还可能会有虚拟货币你懂得所以小数点后位数的需求都不一样的啊。本篇的例子的程序可以从 https://github.com/kentliu2007/EFCoreDemo/tree/master/BackingField 下载建议可以下载后对照着代码来阅读本篇。我用的是 VS2017按照上述场景的需求我们有数据表Clients 的索引ClientAccountBalance 的索引Currencies 的索引UsersClients, ClientAccountBalance, Currencies测试数据EF6的实现方式让我们先来看看如果用EF6怎么做EF6的话有设计器啊轻松容易毫无压力项目EF Model DiagramClientAccountBalance的设置rawAmount的设置setter和getter都是internal的因为这个是非 对外(public)属性User的设置rawPassword的设置setter和getter都是internal的因为这个是非 对外(public)属性针对场景一的在Custom目录下User类的代码针对场景二的在Custom目录下ClientAccountBalance类的代码大功告成简单吧EFCore的实现方式EFCore没有设计器难道就“臣妾做不到”了吗其实借助Backing Fields的话用EFCore来实现更简单更优雅。告诉EFCore指定 类 的 某个Property所对照的 类 的 Field 是哪个且还可以指定它所对照的数据表的字段名告诉EFCore类 的 某个Field 它所对照的数据表的字段名Backing Fields两个主要用法在 DbContext.OnModelCreating方法里面modelBuilder.EntityMyEntity().Property(b b.MyProperty).HasField(_myField).HasColumnName(ColumnName);modelBuilder.EntityMyEntity().Property(_myField).HasColumnName(ColumnName);项目DbContext的程序Backing Fields出没请注意针对场景一的User的程序针对场景二的ClientAccountBalance的程序搞定了。单刀直入简单利索。对吧真的就可以吗好吧如果不信的话可以下载代码跑一下 单元测试 来体验一下嘛 :-P 。在幕后英雄Backing Fields的帮助下我们轻轻松松地用几行代码就搞定了上述两个情景的栗子了重点在 DbContext 程序里面啊。很棒对吧下一篇我将会分享一下怎样在 EFCore上借助它的 Lazy Loading 来实现在 EF5/6 上面轻松地用 Table Mapping就实现了的 Entity Split 功能。明年(今天是年二九嘛)见 :-D相关文章Shadow Properties之美一【Microsoft Entity Framework Core随笔】Shadow Properties之美二【Microsoft Entity Framework Core随笔】原文地址https://www.cnblogs.com/fatkent/p/10348864.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com