Entity framework 创建/更新时对实体的回调
我想知道某个数据库表中的实体是何时创建或更新的。该应用程序本质上是一个CMS,我需要知道什么时候对内容进行了更改,以便我可以为搜索重新编制索引 我知道自动生成的LINQ to EF类在某些字段发生更改时具有可重写的方法,但我需要知道整个对象的创建/更新时间,而不仅仅是单个字段。我试着把它放在OnCreated中,结果发现这意味着OnObjectInitialized,而不是onobjectinsertedintobtablexd 我搜索了一下,发现了。“实体状态”部分看起来像是我想要的,但我不确定如何使用这些信息。在哪里重写这些方法 或者也许有另一种/更好的方法Entity framework 创建/更新时对实体的回调,entity-framework,Entity Framework,我想知道某个数据库表中的实体是何时创建或更新的。该应用程序本质上是一个CMS,我需要知道什么时候对内容进行了更改,以便我可以为搜索重新编制索引 我知道自动生成的LINQ to EF类在某些字段发生更改时具有可重写的方法,但我需要知道整个对象的创建/更新时间,而不仅仅是单个字段。我试着把它放在OnCreated中,结果发现这意味着OnObjectInitialized,而不是onobjectinsertedintobtablexd 我搜索了一下,发现了。“实体状态”部分看起来像是我想要的,但我不确
(我还需要了解系统的另一部分,它会在某些内容发生更改时发送通知。我希望在插入/更新发生时自动执行此代码,而不是将其放在控制器中,希望我始终调用该方法。)您需要获取ObjectStateEntry从ObjectContect的ObjectStateManager属性
var objectStateEntries = this.ObjectStateManager.GetObjectStateEntries();
这些条目包含您根据上下文下拉的每个对象状态,以及对它们执行的操作类型
如果您使用的是EF4,则可以覆盖SaveChanges方法以包含此功能。我使用这种技术来审核数据库中发生的每一个更改,而不是触发器。我仍然迷茫:-/老实说,我不完全理解EF,我使用的是ASP.NET MVC 2(.NET 4),所以我相信所有这些都是通过.dbml设计器为我生成的(创建了一个继承System.Data.Linq.DataContext的类)。我是不是把EF和其他东西搞混了,或者只是找错了地方?@Colin O'Dell-有4种不同的生成策略,因此它永远不能保证生成的代码中有任何一种都会有这些钩子。基本上,每个ORM都有一些状态跟踪的概念。对象被放下,引用(sorta)被保留。EF的ObjectContext提供此状态跟踪。这是创建和更新实体时需要跟踪的内容。好的,谢谢。我知道我可以从数据上下文中提取一个实体,修改它,然后在数据上下文中调用Save(),它确切地知道发生了什么变化。我会挖得更深一点,看看能找到什么。再次感谢你的帮助!