实体模型在数据更改时是否触发事件?

时间:2011-04-26 14:25:55

标签: c# entity-framework events data-binding

我希望在特定表中的数据更改时得到通知,由实体模型表示。模型是否了解基础数据的变化?如果它确实触发了一个事件,我该如何订阅它?

4 个答案:

答案 0 :(得分:5)

你的问题其实很不清楚。

  

我希望在特定表格中的数据更改时收到通知,由实体模型表示。

这是什么意思?

您是否希望收到有关您的应用程序未完成的数据库更改的通知?然后答案是:没有EF不提供任何此类通知系统。你必须建立自己的。

您是否希望收到有关您对实体所做更改的通知?对于导航属性,答案是INotifyPropertyChanged接口和ObservableCollectio n。在实体中使用这些构造,以便在实体更改时触发事件。

您想知道将在数据库中执行哪些更改?覆盖SaveChanges或处理SavingChanges并使用ObjectStateManager获取已更改实体的列表。 Here是如何获取给定类型的已添加实体列表的一些示例。

答案 1 :(得分:3)

NuGet package EntityFramework.Triggers很好地包含了为插入,更新和删除订阅实体的功能。

使用DbContextWithTriggers包装您的上下文;

public class MyContext : DbContextWithTriggers {
    public DbSet<Person> People { get; set; }
}

然后订阅触发事件

var mycontext  = new MyContext() { TriggersEnabled = true };
Triggers<Person>.Inserting += entry =>
{
    Console.WriteLine($"Person: {entry.Entity}");
};

答案 2 :(得分:1)

不,Change上没有发生任何事件,只有当你SaveChanges时才能发现你需要的东西......

为此,请尝试查看this question / answers

答案 3 :(得分:1)

如果您的目的是仅在有更改的情况下保存数据,请参阅以下链接:

http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.savingchanges.aspx