替代dbContext.SaveChanges()的方案咨询及Telerik OpenAccess相关问题
问题:Telerik OpenAccess中减少SaveChanges触发额外事件的解决方案
背景
我司使用Telerik OpenAccess框架,每次调用dbContext.SaveChanges()都会触发一个额外事件。一名新手开发者调用该方法多达93次,导致应用出现诸多问题(该事件仅需触发1-2次)。尝试移除这些调用不可行,因为数据库修改是必要操作,此举会引发程序大规模故障。
咨询方向
- 是否存在可替代
dbContext.SaveChanges()的数据库变更保存代码? - 若不存在替代方案,可接受如下思路的解决方案:
var events = dbContext.getEvents(); dbContext.RemoveEvents(); dbContext.SaveChanges(); dbContext.AddEvents(events); - 能否获取一个不会触发上述事件的独立DbContext?例如:
using (var anotherDbContext = _unityContainer.Resolve_another<IDatabaseConnection>()) { ... // 可执行数据库修改且不触发事件 }
DbContext获取方式补充
private readonly IUnityContainer _unityContainer; using (var dbContext = _unityContainer.Resolve<IDatabaseConnection>()) { ... // 所有数据库相关操作均在此using块内执行 }
UnityContainer来自Microsoft.Practices.Unity,定义如下:
// // Summary: // Interface defining the behaviour of // the Unity dependency injection container. public interface IUnityContainer : IDisposable
CreateDetachedCopy方案可行性疑问
我发现Telerik OpenAccess的CreateDetachedCopy()方法,推测用法如下:
var obj = dbContext.CreateDetachedCopy<Class1>(o => o.id==known_id); obj.ChangeSomething(); dbContext.SaveChanges(); // obj的修改不会被提交
现在需要解决的问题是:如何在合适时机提交obj的修改?我设想了如下逻辑,但不知如何实现CloneInformationFromObject部分:
var obj2 = dbContext.GetData<Class1>(o => o.id == obj.id).FirstOrDefault(); obj2.CloneInformationFromObject(obj); // 仅为示意名称,不知具体实现方式 dbContext.SaveChanges();
请问:
CloneInformationFromObject部分如何实现?- Telerik OpenAccess库是否提供相关支持?
注意:我的dbContext是Telerik OpenAccess dbContext的接口封装,该接口未包含AttachCopy()方法,因此无法使用该方法。
内容的提问来源于stack exchange,提问作者Dominique
相关产品推荐
相关产品推荐

