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

Mor*_*ker 5 c# data-binding events entity-framework

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

Lad*_*nka 6

你的问题其实很不清楚.

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

这是什么意思?

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

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

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


won*_*nea 5

NuGet包EntityFramework.Triggers很好地包装了预订至实体插入,更新和删除的功能。

只需使用 DbContextWithTriggers 包装您的上下文;

public class MyContext : DbContextWithTriggers {
    public DbSet<Person> People { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后订阅触发事件

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