我有一个通过第三方服务发送消息的Web服务,然后该服务通过设置" Sent"来更新我的数据库。 flag(将其设置为1表示成功,-1表示失败)。我的Web服务正在使用代码第一实体框架模型。
我发送邮件,在我的数据库中插入邮件记录,然后等待第三方服务更新已发送的标志:
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",'已发送'总是返回0.但是如果我手动检查数据库中的记录,则Sent被设置为1,因为它是由第三方服务设置的。
似乎FirstOrDefault
正在从缓存中返回值,但我的印象是,只要您调用FirstOrDefault
,它就会调用数据库。
有没有人对此有解释?有什么方法可以解决它吗?
感谢。
答案 0 :(得分:1)
有人认为你可以做的就是分离你刚从实体上下文中添加的记录。这样,实体框架将被迫再次从数据库中获取它。
要做到这一点,只需调用detach(messageObj),其中messageObj是对您添加到表中的消息的引用。请记住在调用保存更改后执行此操作,否则将无法创建记录。