Включить отслеживание изменений в дочерних объектах с помощью STE

#self-tracking-entities #change-tracking

#объекты самослеживания #отслеживание изменений

Вопрос:

Я использую STE и хочу включить отслеживание изменений для объекта и его дочерних элементов. Что мне сейчас нужно сделать, это что-то вроде этого.

 int id = 1;

using(CustomerEntities context = new CustomerEntities())
{
    CustomerSection custSection = context.CustomerSections.Include("CustomerSections.Customers").SingleOrDefault(p => p.ID == id);

custSection.StartTracking();

    foreach(Customer cust in custSection.Customers)
    {
        cust.StartTracking();
    {

    return custSection;

}
  

Что я ищу, так это способ автоматически включить отслеживание изменений и для дочерних объектов, без необходимости перебирать каждый из них и явно указывать ему начать отслеживать изменения.

Заранее спасибо за любую информацию.

Ответ №1:

Скорее всего, вы используете объекты самослеживания в сочетании с WCF. Тогда нет необходимости включать отслеживание изменений вручную. это уже сделано за вас. Шаблон T4, который генерирует STE, включает в себя метод, украшенный атрибутом [OnDeserialized], который запускает отслеживание после десериализации объектов (что обычно происходит после достижения клиента и преобразования обратно в экземпляры класса среды выполнения из xml, который WCF сгенерировал для транспорта. Смотрите точный пример кода:

     [OnDeserialized]
    public void OnDeserializedMethod(StreamingContext context)
    {
        IsDeserializing = false;
        ChangeTracker.ChangeTrackingEnabled = true;
    }
  

Найдите свои объекты или шаблон T4, и вы скоро найдете это.