Я использую запрос Linq для извлечения сущностей с SQL-сервера с использованием Entity Framework. Когда я обновляю entitiy, 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;
}
Есть ли конкретная причина, о вы делаете контекстный объект статический? – Jorge
Поэтому мне не нужно воссоздать его и обернуть каждый метод блоком 'using'. – Echilon
Но вы можете использовать переменную без использования. На самом деле я всегда использую DBContext, но не статический, и переопределяю метод dispose, чтобы избежать проблем с производительностью. Причина для кеширования заключается в том, что '_db' является статической переменной, и вы экземпляр ссылки только один раз, сохраняя ссылку в течение всего цикла цикла – Jorge