任何在任何时间内使用LINQ to SQL的人都知道使用全局静态数据上下文会导致数据库之间的同步问题(特别是如果被许多并发用户使用)。为了简单起见,我喜欢直接在内存中处理对象,在那里操作,然后在更新和插入到该对象及其链接的对应物时完成后推送context.SubmitChanges()。我知道这不是推荐的,但它也有优势。这里的问题是任何附加的链接对象都不会刷新,并且也无法使用context.Refresh(linqobject.linkedcollection)刷新集合,因为这不会考虑新添加和删除的对象。
我的问题是我错过了一些明显的东西吗?似乎很疯狂,没有简单的方法来刷新这些集合而不创建特定的逻辑。
我还想提供一个我发现的解决方法,但我很想知道这种方法是否存在缺陷(我没有对输出进行分析,并担心它可能会产生意外的插入和删除语句)
foreach (OObject O in Program.BaseObject.OObjects.OrderBy(o => o.ID))
{
Program.DB.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, O);
Program.DB.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, O.LinksTable);
O.LinksTable.Assign(Program.DB.LinksTable.Where(q => q.OObject == O));}
似乎可以做Program.DB.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, Program.DB.OObjects);
之类的事情
然而,这似乎会返回整个表格,这通常是非常低效的。有什么想法吗?