#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, и вы скоро найдете это.