【发布时间】:2011-01-26 19:55:46
【问题描述】:
我在将 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();
}
}
}
}
谢谢,
安妮莉
【问题讨论】:
-
我一直想知道数字二的真正含义是什么,谢谢! ;) 说真的,神奇的数字已经出现了,
enum会更有效(就可读性而言,如果没有别的)。如果Status属于enum类型/值,那么我建议您使用正确的类型,而不是像这样分配值。题外话,我知道,但我认为这是不错的信息。 -
@Mr.失望 - 哈哈,我知道,应该从一开始就这样做,而不是采取快速的选择,它已经在我要做的事情清单上很久了。 :)
-
很难从您的代码 sn-p 中猜出您实际在做什么:“MyThing”是由 Linq2SQL 创建的数据库记录,而 Status 是外键字段吗?
-
@Christoph - 对不起,我认为如果我保持简短会更容易,但我认为我做了相反的事情! :) 现在更新了我的问题。 MyThing 是我从数据库中获得的要发送的文本消息列表,是的,状态是外键字段。
-
最好的解决方案(也与性能有关)可能是您可以保持原始 DataContext 活动直到您完成所有操作。如有必要,当您知道已完成时,显式 Dispose() 不使用 using 范围。
标签: c# .net linq-to-sql foreign-keys datacontext