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