c# - 在更新外键字段之前释放 DataContext

标签 c# .net linq-to-sql foreign-keys datacontext

我在使用 linq to sql 进行 asp.net c# Web 应用程序的 DataContexts 时遇到一些问题。

我首先遇到了抛出异常的问题,因为我没有处理 DataContext,与 this question 中的错误相同。 。我使用的是静态 DataContext,这可能就是它没有正确处理的原因,在阅读 this 之后以及其他几篇文章,我将所有调用包装在 using 语句中,以确保它们会被处理。

但是,现在当我需要更新外键时遇到问题,因为 DataContext 已被处理。我不确定为什么它已经被处理掉了,以及在这种情况下最好的做法是什么,所以任何想法将不胜感激!

此处的简短示例:

更新:当我试图使其尽可能短时,我认为我的示例太困惑了,因此这里有一个更长且希望更好的示例:

private static void SendTexts(List<TextAlert> TextQueue)
{
    using (THTDataContext db = new THTDataContext())
    {
        foreach (TextAlert text in TextQueue)
        {
            try
            {
                // do IntelliSMS stuff
                
                // set status to 'sent'
                text.Status = 1;

                db.SubmitChanges();
            }
            catch (IntelliSMSException ex)
            {
                // set status to 'failed'
                text.Status = 2;
                
                db.SubmitChanges();
            }
        }
    }
}

谢谢

安妮莉

最佳答案

您可能需要将传入的 MyThing 附加到您的新上下文。像这样的东西可能会起作用:

private static void DoMyStuff(MyThing thing)
{
    using (MyDataContext db = new MyDataContext())
    {
       db.MyThings.Attach(thing);
       thing.Status = 1;
       db.SubmitChanges();
    }
}

附加后,上下文应该能够跟踪对其所做的更改,并在提交时存储它们。

如果这不能解决“已处理”异常,那么您可以尝试 "detaching"在处置旧上下文之前的 MyThing。但请注意,如果您必须走这条路线,则 DataContext 的生命周期可能是错误的,因为实体并非设计用于在同一应用程序域中的上下文之间移动。

如果您有兴趣更好地了解附加/分离业务,MSDN 的 Dinesh Kulkarni 有一个 short blog post关于它。

关于c# - 在更新外键字段之前释放 DataContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4809332/

相关文章:

.Net 模式与 GOF

c# - 如何通过 HTTP 从 C# 应用程序连接到 SQL Server?

.net - TFS Express 版本 - 安装在服务器还是本地计算机上?

c# - 将 Take() 与匿名类型一起使用(DB2 Provider)

c# - Newtonsoft.json JSON.NET

c# - 将 double 转换为具有 N 位小数、点作为小数点分隔符且没有千位分隔符的字符串

c# - 错误 "Cannot perform Like Operation on ' System.Int3 2' and ' System.String'”设置DataGridView数据源

c# - 捕获变量实例化问题

linq-to-sql - 在 LINQ 中对同一个表使用多个外键

c# - 一对多投影 LINQ 查询重复执行