gpt4 book ai didi

c# - Linq to SQL 记录未更新

转载 作者:太空宇宙 更新时间:2023-11-03 17:33:00 25 4
gpt4 key购买 nike

我正在尝试从表中获取记录列表,然后在 foreach 中获取循环我正在尝试 update一份一份的记录。

这是我的代码

     public IEnumerable<MessageOut> GetSMSInformation()
{
using (var db = new DataClasses1DataContext())
{
var sms = db.MessageOuts.Where(msg => msg.msgstatus.Equals("Pending")).Select(msg => msg);
return sms.ToList();
}
}



public void StartSMSSending()
{
var information = GetSMSInformation();

foreach (var sms in information)
{
SendSMS(sms.reciever, sms.msg);
UpdateRecords(sms,"Delivered", DateTime.Now);
}
}

public void UpdateRecords(MessageOut sms, string msgStatus, DateTime sentTime)
{
using (var db = new DataClasses1DataContext())
{
sms.msgstatus = msgStatus;
sms.senttime = sentTime;
db.SubmitChanges();
}
}

记录只是不更新​​。我也没有收到任何错误。

有人可以帮我解决这个问题吗?

最佳答案

为了使用 Linq2Sql 类执行更新操作,您需要保持上下文处于事件状态。在上面的示例中,您将您的选择包含在 using 语句中,因此您的记录被返回,然后上下文被转储。当您进行更新时,会有一个新的上下文,因此没有注册到对象的更改。一种方法是使上下文成为更全局的对象或将其作为参数传递。

public IEnumerable<MessageOut> GetSMSInformation(DataContext context)
{
var sms = context.MessageOuts.Where(
msg => msg.msgstatus.Equals("Pending")).Select(msg => msg);
return sms.ToList();
}

public void StartSMSSending()
{
using (var db = new DataClasses1DataContext())
{
var information = GetSMSInformation(db);

foreach (var sms in information)
{
SendSMS(sms.reciever, sms.msg);
UpdateRecords(sms,"Delivered", DateTime.Now, db);
}
}
}

public void UpdateRecords(MessageOut sms, string msgStatus, DateTime sentTime, DataContext context)
{
sms.msgstatus = msgStatus;
sms.senttime = sentTime;
context.SubmitChanges();
}

或者,您可以这样做(我的首选方法):
public IEnumerable<MessageOut> GetSMSInformation()
{
var sms = Context.MessageOuts.Where(
msg => msg.msgstatus.Equals("Pending")).Select(msg => msg);
return sms.ToList();
}

public void StartSMSSending()
{
var information = GetSMSInformation(db);

foreach (var sms in information)
{
SendSMS(sms.reciever, sms.msg);
UpdateRecords(sms,"Delivered", DateTime.Now, db);
}
}

public void UpdateRecords(MessageOut sms, string msgStatus, DateTime sentTime)
{
sms.msgstatus = msgStatus;
sms.senttime = sentTime;
Context.SubmitChanges();
}

private DataClasses1DataContext _context = null;
public DataClasses1DataContextContext
{
get
{
return _context ?? (_context = new DataClasses1DataContext());
}
}

关于c# - Linq to SQL 记录未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12799268/

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