gpt4 book ai didi

c# - self 跟踪pocos,如何判断属性是否已更改?

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:33 25 4
gpt4 key购买 nike

((IObjectWithChangeTracker)user).ChangeTracker.State 似乎每次都给我“未更改”。当我调用 ApplyChanges 时,一切都被正确拾取,但我希望能够在我的业务层中确定是否有人更改了特定属性,如果他们这样做了,我想执行一个操作。

已更新

我认为这与以下事实有关:我并不总是序列化我的实体,这只会触发更改跟踪。我在 asp.net 场景中使用它们,有时我会将它们持久化(序列化)到 session 状态或 View 状态中。

已更新

在本页底部的答案中添加了更多信息。

最佳答案

几个选项,每个选项都有起伏:

  • 您可以在域对象上保留私有(private)的“原始”值。当您从数据库中获取对象时填充它们,然后您可以轻松检查每个字段是否等于其原始值。但是,这在大型对象上可能会很麻烦。

  • 另一种选择是让您的域实现 ICloneable,并在您的数据访问层中保留原始对象的深拷贝,以及将其提取出来的逻辑。深拷贝仍然是可变的,所以你必须小心不要修改它,它会使你的内存占用加倍。

  • 您可以简单地重新检索记录作为新实例,并检查其字段。这很简单且相对直接,但需要访问数据库两次。

  • 最后,如果您使用的是 NHibernate 之类的 ORM,通常可以插入它用来确定哪些数据已更改的逻辑。这是在您的域层上进行审计和其他观察行为的最佳位置,但它需要使用支持此功能的 ORM,并且您更改数据的能力有限。

关于c# - self 跟踪pocos,如何判断属性是否已更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4188959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com