Entity Framework с ADO.NET не обновляет представление

#c# #wpf #entity-framework #ado #localdb

Вопрос:

Я борюсь с Entity Framework, используя ADO.NET не обновляет представление следующим образом:

 public async static Task InsertBackGroundImageAsync(string name, byte[] image)
{
    Entities db = new Entities();
    db.Configuration.AutoDetectChangesEnabled = false;
    db.BackgroundImages.Add(new BackgroundImage { Name = name, Image = image });
    db.ChangeTracker.DetectChanges();
    await db.SaveChangesAsync();
    return;
}
 

Я также попробовал этот код:

 public async static Task InsertBackGroundImageAsync(string name, byte[] image)
{
    Entities db = new Entities();
    db.Configuration.AutoDetectChangesEnabled = false;
    BackgroundImage bgi = new BackgroundImage { Name = name, Image = image };
    db.BackgroundImages.Add(bgi);
    db.Entry(bgi).State = EntityState.Added;
    db.ChangeTracker.DetectChanges();
    await db.SaveChangesAsync();
    return;
}
 

Ни один из них не работает, однако, если я работаю непосредственно с объектом, он работает.

Заменяющий

 Entities db = new Entities() 
 

с

 Entities db = IoC.Mainview.DBs 
 

который является текущим, работает.

Я должен добавить, что datacontext передается из CollectionViewSource. Какие-нибудь указания?

Комментарии:

1. Зачем это обновляет представление? Предоставляете ли вы коллекции entity framework непосредственно для просмотра? Это плохая идея. Для чего угодно, кроме тривиальных приложений, использовать отслеживание изменений ef-плохая идея, так как это означает, что вы все время обходите одно соединение.

2. Я понимаю вашу точку зрения, но разве это не рекомендуемый Microsoft способ? docs.microsoft.com/en-us/ef/ef6/fundamentals/databinding/wpf

3. Как это «не работает»? Исключения? Не ожидаемые результаты? Это просто вид из окна? Кроме того, «используя ADO.net» это избыточная информация. EF всегда использует ADO.net.

4. Да, извините за шумиху… Это действительно обновляет базу данных, но не представление. Я передаю DataContext=»{StaticResource backgroundImageViewSource} в элемент управления, как описано в ссылке Microsoft.

5. Нет, просто не работает. Что бы я ни делал, это просто не обновляет представление. Все это настроено как observablecollection, поэтому мне не нужно обновлять список. Что я упускаю?