1

私はこれをどう表現するか全く知りませんでした。私はASP.NETMVC3 Webアプリケーションを持っており、最初に既存のデータベース(自動生成されていない)リポジトリパターンを使用したかなり標準的なEF4.1コードを使用しています。Webアプリが通信するデータサービスの下にあるコンテキストがあります。

私が抱えている問題はこれです:整数列のデータベーステーブルがあるとしましょう。値は10です。データベース自体にアクセスしてテーブルに25を入力すると、ブラウザーで更新を何度押しても、ブラウザーを閉じて再度開いたり、ブラウザーの履歴をクリアしたりしても、値は保持されます。 of10.サイトを再公開する必要があります。

なぜこれを行うのですか?私はここで正しいことを非難していますか?これはEFの問題ですか?ASP.NETの問題?サーバーの問題?...これをどこで調べるべきかわかりません。

4

1 に答える 1

2

はい、私は自分のアプリケーションでこの問題に遭遇しました。

Entity Frameworkによって追跡される「エンティティ」(オブジェクトインスタンス)はメモリにキャッシュされ、データベースを再クエリしても更新されません。これらを上書きすると、キャッシュされたバージョンに加えた変更がすべて失われる場合があります。

EFに既存の値を上書きさせることで回避できますが、変更したものはすべて上書きされることに注意してください。保留中の変更を最初に保存したことがわかっている場合にのみ実行してください。

私は仕事をするためにこの拡張メソッドを書きました:

public static class DbSetExtensions
{
    public static System.Data.Objects.ObjectSet<T> Uncached<T>(this IObjectContextAdapter context)
        where T : class
    {
        var set = context.ObjectContext.CreateObjectSet<T>();
        set.MergeOption = System.Data.Objects.MergeOption.OverwriteChanges;
        return set;
    }
}

だからそれを使って、私は言うことができます:

var orders = myDbContext.Uncached<Order>().Where(...);

...ordersセットには、データベースからの新しい注文が含まれ、Order以前にクエリされたオブジェクトのプロパティが上書きされます。

于 2012-05-03T00:58:11.920 に答える