Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 创建/更新时对实体的回调_Entity Framework - Fatal编程技术网

Entity framework 创建/更新时对实体的回调

Entity framework 创建/更新时对实体的回调,entity-framework,Entity Framework,我想知道某个数据库表中的实体是何时创建或更新的。该应用程序本质上是一个CMS,我需要知道什么时候对内容进行了更改,以便我可以为搜索重新编制索引 我知道自动生成的LINQ to EF类在某些字段发生更改时具有可重写的方法,但我需要知道整个对象的创建/更新时间,而不仅仅是单个字段。我试着把它放在OnCreated中,结果发现这意味着OnObjectInitialized,而不是onobjectinsertedintobtablexd 我搜索了一下,发现了。“实体状态”部分看起来像是我想要的,但我不确

我想知道某个数据库表中的实体是何时创建或更新的。该应用程序本质上是一个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(),它确切地知道发生了什么变化。我会挖得更深一点,看看能找到什么。再次感谢你的帮助!