2015-02-19 2 views
0

У меня есть класс ниже:Entity Framework - Как не запускать CollectionChanged При загрузке коллекции из базы данных?

public class Orcamento 
{ 
    public Orcamento() 
    { 
     Produtos = new ObservableCollection<Produto>(); 
     Produtos.CollectionChanged += ProdutosCollectionChanged; 
    } 

    public int Id { get; set; } 

    public ObservableCollection<Produto> Produtos { get; private set; } 

    private void ProdutosCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 
    { 
     //Some process here that should not be run if it is being loaded from the database 
    } 

} 

Когда я искать класс бюджета в базе данных, событие CollectionChanged работает. Обратите внимание, что код ниже:

using (var contexto = new Contexto()) 
{ 

    Orcamento orcamento = contexto.Orcamentos.OrderByDescending(o => o.Id) 
     .Include(x => x.Produtos) 
     .FirstOrDefault(); 
    //More some code above... 
} 

Вопрос: Как я знаю, когда коллекция была изменена пользователем, или когда она была модифицирована путем загрузки базы данных, так как нужно только событие, которое срабатывает, когда коллекция изменяется Пользователь?

+0

Для каких целей вы используете ObservableCollection? М.Б. его легче изменить на другой тип коллекции? –

ответ

0

Добавить поле Bool в классе Orcamento и при изменении значения из базы данных сделать поле bool равным true. Проверьте значение bool в событии ProdutosCollectionChanged.

+0

Хорошо, я думал, что как это сделать в инфраструктуре сущности. Например, инфраструктура сущности может иметь способ не запускать сеттеры и события CollectionChanged, когда класс был загружен из базы данных. –

+0

при запуске из EntityFrameWork удалить событие CollectionChanged .Produtos.CollectionChanged - = ProdutosCollectionChanged; –

+0

подписка выполняется в конструкторе. Где бы вы установили логическое значение? Не могли бы вы добавить рабочий пример? – Default

Смежные вопросы