gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:41:00 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com