我正在尝试确定使用 BreezeJS 保存的新添加/插入记录的 ID。这样做的目的是广播和通知监听客户端的变化,以便他们可以在必要时更新他们的视图。
BreezeJS 提供了一种有用的方法,通过继承类型化的 EFContextProvider 来拦截对其底层 Data/ObjectContext 的调用。父级公开了几个要覆盖的方法,例如下面的覆盖示例。这适用于更新/删除操作。但是,因为这发生在保存更改之前,因此此时没有为插入生成 ID。我无法在此类中找到可以覆盖的任何其他方法。在最坏的情况下,我将扩展部分数据上下文( ),但我觉得将这个通知系统分成多个类是不合适的。建议?
protected override bool BeforeSaveEntity(EntityInfo entityInfo) {
var hubContext = GlobalHost.ConnectionManager.GetHubContext<AppHub>();
if (entityInfo.EntityState == EntityState.Modified) {
try {
hubContext.Clients.All.handleEntityUpdate(new {
EntityType = entityInfo.Entity.GetType().Name,
Key = ((dynamic)(entityInfo.Entity)).Id
});
}
catch (Exception ep) {
//failed to notifiy the clients. *Oh well* no biggie.
//Try, catch, curley, curley, curley.
}
}
else if (entityInfo.EntityState == EntityState.Deleted) {
try {
hubContext.Clients.All.handleEntityDelete(new {
EntityType = entityInfo.Entity.GetType().Name,
Key = ((dynamic)(entityInfo.Entity)).Id
});
}
catch (Exception ep) {
//failed to notifiy the clients. *Oh well* no biggie.
//Try, catch, curley, curley, curley.
}
}
return base.BeforeSaveEntity(entityInfo);
}