我想知道某个数据库表中的实体何时被创建或更新。该应用程序本质上是一个CMS,我需要知道何时对内容进行了更改,以便我可以重新索引它们以进行搜索。
我知道自动生成的LINQ to EF类在某些字段发生变化时具有可覆盖的方法,但我需要知道何时创建/更新整个对象,而不仅仅是单个字段。我尝试将它放在OnCreated中,但发现这意味着OnObjectInitialized而不是OnObjectInsertedIntoDBTable xD
我做了一些搜索,遇到了this link。 “实体状态”部分看起来像我想要的,但我不知道如何使用这些信息。我在哪里覆盖这些方法?
或许还有另一种/更好的方式?
(我还需要知道系统的另一部分,当某些内容发生变化时会发送通知。我希望这些代码在插入/更新发生时自动执行,而不是将其放在控制器中并希望希望我总是称这种方法。)
答案 0 :(得分:2)
您需要从ObjectContect的ObjectStateManager属性中获取ObjectStateEntry。
var objectStateEntries = this.ObjectStateManager.GetObjectStateEntries();
此条目包含您根据上下文提取的每个对象状态以及对其执行的操作类型。
如果您使用的是EF4,则可以覆盖SaveChanges方法以包含此功能。我已经使用这种技术来审计数据库中发生的每个更改而不是触发器。