gpt4 book ai didi

c# - FirstOrDefault 似乎没有在 Add 之后调用数据库

转载 作者:行者123 更新时间:2023-11-30 20:41:20 27 4
gpt4 key购买 nike

我有一个通过第三方服务发送消息的 Web 服务,然后该服务通过设置“已发送”标志更新我的数据库(将其设置为 1 表示成功,-1 表示失败)。我的 Web 服务使用代码优先 Entity Framework 模型。

我正在发送消息,在我的数据库中插入一条消息记录,然后等待第 3 方服务更新已发送标志:

var messageId = sendMessage();
using (var db = new DBModel())
{
db.Messages.Add(new Message()
{
MessageId = messageId,
Sent = 0,
// Other properties
});
db.SaveChanges();
bool sent = false;
while (!sent)
{
int i = db.Messages.FirstOrDefault(m => m.MessageId == messageId).Sent;
if (i == -1) throw new Exception();
sent = i == 1;
}
}

问题是每次我调用“FirstOrDefault”时,“Sent”总是返回 0。但是如果我手动检查数据库中的记录,Sent 会设置为 1,因为它是由第三方服务设置的。似乎 FirstOrDefault 正在从缓存中返回值,但我的印象是,无论何时调用 FirstOrDefault,它都会调用数据库。

有人对此有解释吗?有什么办法可以解决这个问题吗?

谢谢。

最佳答案

将您的代码更改为:

DBModel db;
var messageId = sendMessage();
using (db = new DBModel())
{
db.Messages.Add(new Message()
{
MessageId = messageId,
Sent = 0,
// Other properties
});
db.SaveChanges();
}

bool sent = false;
while (!sent)
{
using (db = new DBModel())
{
int i = db.Messages.FirstOrDefault(m => m.MessageId == messageId).Sent;
if (i == -1) throw new Exception();
sent = i == 1;
}
}

或者:

var messageId = sendMessage();
using (var db = new DBModel())
{
var message = new Message()
{
MessageId = messageId,
Sent = 0,
// Other properties
};

db.Messages.Add(message);
db.SaveChanges();
bool sent = false;
while (!sent)
{
db.Detach(message); // <<< This part
message = db.Messages.FirstOrDefault(m => m.MessageId == messageId);
var i = message.Sent;
if (i == -1) throw new Exception();
sent = i == 1;
}
}

关于c# - FirstOrDefault 似乎没有在 Add 之后调用数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32514466/

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