0

AzureSQLを使用したMVC4Webサイトがあり、動作がおかしい。ローカルで実行している場合(IIS Express)、データベースに対して1つのLINQクエリがあり、変更された場合でも同じデータが返され、別のクエリで異なることがわかります。私は本当に何が起こっているのか疑問に思っています。

私が使用しているコントローラー機能は

    public int GetNotificationTotalCount(int userId)
    {
        int cnt = 0;
        var tmp = (from entry in _db.NotificationCounts
                   where entry.UserId == userId
                   select entry).FirstOrDefault();

        if (tmp != null) // return zeros
            cnt = tmp.FlagsCount + tmp.RepliesCount;

        return cnt;
    }

、ここで、_ dbは私のDataContextであり、LINQはIQueryableを返します。

IQueriableのためにデータがキャッシュされることはわかっていますが、この関数を終了し、tmpオブジェクトが破棄されることになっています。またはそう思います。

それは...ですか?

4

1 に答える 1

1

あなたのコンテキストの寿命は長すぎると思います。DataContextインスタンスは短命であると想定されています。オブジェクトはキャッシュインされているため、オブジェクトを明示的に更新しない限り、entryオブジェクトをもう一度フェッチしようとすると、キャッシュから取得されます。

public int GetNotificationTotalCount(int userId)
{
    using(var db = new MyDataContext())
    {
        return (from entry in db.NotificationCounts
                where entry.UserId == userId
                select entry.FlagsCount + entry.RepliesCount)
               .FirstOrDefault() ?? 0;
    }
}
于 2013-03-06T10:07:24.110 に答える