跟踪对类进行的更改,而不使用实体框架

问题描述 投票:0回答:1

我需要跟踪对复杂模型所做的任何更改(我必须说出一种非常复杂的模型与各种关系)。一旦我确定了这些更改,我必须将它们保存到一个单独的表中,以便稍后由管理员批准。

我已经尝试使用实体框架的更改跟踪器,甚至尝试自定义它,但它只是在问题后给我问题。

你有什么建议我可以用来跟踪这些不涉及实体框架的变化?


更新:我最终通过创建自己的自定义检查器来解决这个问题。花了更多的时间,但最终它更值得,因为我完全控制了变化。

谢谢你的意见,

史蒂夫:)

c# .net entity-framework change-tracking
1个回答
0
投票

很抱歉没有提供代码示例。正如评论所说,这更像是一个想法(对于本交易所而言是广泛的),但它是我以前做过的高级方式。当“反射”非常不受欢迎时,我们将其称为“元数据”,但基本上采用反射 - 因此,今天它被称为元编程。

你的问题,是元编程的一个可爱的用例。由于内存不足和CPU受限,反射过去在“80年代”非常慢。

  • 序列化,例如JSON使用反射或臭名昭着的慢速XML(但不再是)
  • 依赖注入是元编程的母亲
  • 像汽车映射器这样的助手也是反射。

今天,由于出色的计算能力,它已经过高度优化并且工作得非常好。只要您不编写hacky代码,或者尝试进一步优化它,您就可以了。你应该相信框架和编译器。

你可以做一些奇特的事情,如拦截变化,但这可能会变得非常复杂。为了使它更简单,你所要做的就是遵循一点DDD

您的类应该只允许通过您公开的属性进行更改。然后可以发送改变状态的每个Set或操作您可爱的状态跟踪代码。

在.NET 4.5中,反射非常快,并且元编程已经在整个展示中用于依赖注入。

要记住更改,请使用优化的集合,例如Dictionary或HashSet。取决于您的需求。使用GetType存储作为键,值可以是新值,或者包含元数据的类。旧价值,新价值,版本(回滚)等

一旦你在课堂上学到了这一点,你就可以将所有逻辑移到单身,然后定义一些你将在所有“实体”上重复使用的通用方法。

© www.soinside.com 2019 - 2024. All rights reserved.