0

Entity Framework を使用して SQL サーバーからエンティティを取得するために、Linq クエリを使用しています。エンティティを更新すると、EF が結果をキャッシュしています。これは、ObjectContext が静的変数 (以下) にあるためだと思われます。以下のコードを使用してデータを更新する唯一の方法は、メソッドを呼び出して、古いデータが表示される可能性がある場合に設定_dbするnullことです (例: GridView 内)。古いデータが表示される可能性があることを検出する代わりに、キャッシュを防止する方法や、データ層でこのメソッドを呼び出す何らかの終了要求ハンドラーを追加する方法はありますか?

private static ServiceEntities _db;
protected static ServiceEntitiesDb
    {
        get
        {
            if (_db == null)
            {
                _db = new ServiceEntities();
                _db.Contacts.MergeOption = MergeOption.OverwriteChanges; // failed
            }
            return _db;
        }
    }

    public static IEnumerable<Contact> GetContactsByName(string name) {
        var items = Db.Contacts;
        var filteredName = items.Where(i => (i.Name??string.Empty).IndexOf(name) >=0);
        return filteredName;
    }
4

1 に答える 1

0

少し冗長な解決策 (避けたかった) は、それを using ブロックでラップすることです。すなわち:

public static IEnumerable<Contact> GetContactsByName(string name) {
        var items = Db.Contacts;
        var filteredName = items.Where(i => (i.Name??string.Empty).IndexOf(name) >=0);
        return filteredName;
}

なる

public static IEnumerable<Contact> GetContactsByName(string name) {
    using (var db = new SomeContext()) {
        var items = db.Contacts;
        var filteredName = items.Where(i => (i.Name??string.Empty).IndexOf(name) >=0);
        return filteredName;
    }
}
于 2012-07-12T08:20:06.840 に答える