写点什么

Entity Framework 7 中的影子属性

  • 2015-09-02
  • 本文字数:788 字

    阅读完需:约 3 分钟

影子属性是类本身中并不存在,但 Entity Framework 却认为存在的字段。它们能够参与查询、创建 / 更新操作和数据库迁移。微软认为影子属性有两个主要的应用场景:

  • 允许数据访问层访问那些不该由领域模型暴露到应用其它部分的属性
  • 允许开发者高效地添加属性到没有源代码的类中

影子属性在 OnModelCreating 事件中被定义,该事件在 DBContext 中为可重载方法。这里有一个绑定 DataTime 属性 LastUpdated 到 Blog 实体的例子。

复制代码
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<blog>().Property<datetime>("LastUpdated");
}</datetime></blog>

这个属性的一个通用用例是在执行保存操作时自动赋值给 LastUpdated 属性。为此,你可以使用 DBContext.ChangeTracker 来获取 DBEntry 类型的对象列表。你可以这样写:

复制代码
foreach (var item in modifiedEntries)
{
Item.Property("LastModified").CurrentValue = DateTime.Now;
}

一般可以通过重载 DBContext 类的 SaveChanges() 方法实现。通过这里的重载,你可以更新所有需要更新的数据,而又不必在每一个更新数据的地方重复代码。

当 ChangeTracker 适合用于修改保存事件的时候,你会很想绕过 DBEntry 直接访问影子属性。通过 EF.Property 函数就可以做到,如下所示:

EF.Property<datetime>(entity, "LastModified")</datetime>这个表达式放在一个查询中能生成服务器端的 WHERE 和 ORDER BY 子句。

可以在 Channel 9 标题为 Shadow Properties in Entity Framework 7 的视频中了解到关于这个特性的更多信息。

查看英文原文: Shadow Properties in Entity Framework 7


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群InfoQ 好读者)。

2015-09-02 19:002289

评论

发布
暂无评论
发现更多内容

对接上百个第三方 API 后的思考与沉淀

橘长

经验总结 Java EE 经验分享、

H.265编码原理入门

百度Geek说

视频编码

数组目标值target两个整数,并返回它们的数组下标

龙空白白

数据结构与算法

怎样简洁明了地说清楚产品需求?

LigaAI

高效工作 产品经理 需求 产品设计与思考

子网划分不会?瑞哥带你深入理解IP地址,手把手教你子网划分!

wljslmz

网络技术 6月月更 子网划分

MySQL的体系结构

龙空白白

MySQL 数据库

多线程实现的方式

龙空白白

多线程

Django 基础教程

海拥(haiyong.site)

Python django 6月月更

Linux测试端口的连通性

龙空白白

二分查找有序数组中的特定值

龙空白白

数据结构与算法

股票获取最大利润

龙空白白

数据结构与算法

最大和的连续子数组

龙空白白

数据结构与算法

在线文档协作工具,是提高工作效率的第一步

小炮

Java中的static关键字

龙空白白

NFT链游GameFi系统开发,元宇宙游戏搭建

薇電13242772558

NFT 元宇宙 链游

开源字节设计思想

源字节1号

软件开发

中台:数据中台、业务中台、技术中台、应用中台、AI中台……

BeeWorks

硬核剧透!11个议题、14位大咖,龙蜥社区走进 Intel MeetUp 议程公布!

OpenAnolis小助手

技术分享 intel Meetup 龙蜥社区 线上直播

数组判断任意出现的重复值

龙空白白

数据结构与算法

百度工程师教你玩转设计模式(单例模式)

百度Geek说

设计模式

java中synchronized关键字

龙空白白

Java Concurrency

【LeetCode】替换数组中的元素Java题解

Albert

LeetCode 6月月更

SAP 云平台多目标应用 Multi-Target Application 的开发技术介绍

汪子熙

云原生 Cloud SAP CloudFoundry 6月月更

ADB 日志抓取

甜甜的白桃

android adb APK 6月月更

Vim编辑器以及linux常用命令

龙空白白

Linux vim教程

MySQL基础

龙空白白

MySQL 数据库

Fortex方达发布电子交易生态体系 与客户共享共赢

股市老人

NFT铸造交易平台开发市场详情

开发微hkkf5566

【高并发】关于乐观锁和悲观锁,蚂蚁金服面试官问了我这几个问题!!

冰河

并发编程 多线程 高并发 异步编程 6月月更

mixin-- 混入

CRMEB

Entity Framework 7中的影子属性_语言 & 开发_Jonathan Allen_InfoQ精选文章