0

デフォルト設定で SharpRepository.EntityFramework を使用しています。app.config でリポジトリを定義します。これは大きなアプリケーションなので、関連するコード スニペットのみを示します。

IEnumerable<IntegrationQueue> queue_list = 
    qrepo.FindAll(item => item.IntegrationID == Integration.ID
                && (DateTime.Now > item.NextTry
                && item.Lock == false
                && item.Status != StatusEnum.Success && item.Status != StatusEnum.GaveUp)
                || item.Command != CommendEnum.None);

        foreach (IntegrationQueue iq in queue_list)
        {
            Lock(iq);

            Logger.Instance.Trace("Processing record " + iq.ToString());

したがって、コードのこの部分は 15 秒ごとに 1 回呼び出されます。処理する必要があるデータベースからレコードのリストを取得します。

これが奇妙なことです。ここで、SQL Management Studio に移動してレコードを更新し、Command を 0 (なし) 以外に設定するとします。次のパスで、 FindAll() はレコードを queue_list に取得します! わーい!

しかし、レコードを調べたところ、Command は 0 (なし) です。どのように??そのコマンドでトリガーされた FindAll() は != 0 (なし) でした!

したがって、FindAll() マッチングは機能しているように見えますが、キャッシュされたバージョンが表示されます。それは悪いことです。

qrepo.CacheEnabled = false を試し、qrepo.ClearCache() を試しましたが、役に立ちませんでした。

FindAll() の代わりに GetAll() を使用しようとしましたが (違いが正確にはわかりません)、レコードでトリガーすることさえできませんでした。

ご意見をお聞かせください?ありがとうございました!

4

1 に答える 1