在Add之后,FirstOrDefault似乎没有调用数据库

时间:2015-09-11 02:16:26

标签: c# entity-framework linq entity-framework-6

我有一个通过第三方服务发送消息的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,它就会调用数据库。

有没有人对此有解释?有什么方法可以解决它吗?

感谢。

1 个答案:

答案 0 :(得分:1)

有人认为你可以做的就是分离你刚从实体上下文中添加的记录。这样,实体框架将被迫再次从数据库中获取它。

要做到这一点,只需调用detach(messageObj),其中messageObj是对您添加到表中的消息的引用。请记住在调用保存更改后执行此操作,否则将无法创建记录。