我在使用 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/