You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

替代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();

请问:

  1. CloneInformationFromObject部分如何实现?
  2. Telerik OpenAccess库是否提供相关支持?

注意:我的dbContext是Telerik OpenAccess dbContext的接口封装,该接口未包含AttachCopy()方法,因此无法使用该方法。


内容的提问来源于stack exchange,提问作者Dominique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:38:21