EF4: разница между POCO, объектами с самопроверкой и прокси-серверами POCO - PullRequest
5 голосов
/ 19 октября 2010

Может ли кто-нибудь указать мне разницу между POCO, объектами самоконтроля и POCO-прокси?

На самом деле, я работаю с Entity Framework 4.0 и POCO (Repository Pattern), и всякий раз, когда я делаю некоторые изменения в POCO и вызываю ObjectContext.Savechanges, он отражается в БД. Мой вопрос,

  1. Как Контекст сохраняет изменения в БД, так как они не отслеживаются?
  2. Генерирует ли контекст информацию отслеживания на лету для POCO?

Образец кода, который я использую,

        IEFRepository<Category> catRepository = new EFRepository<Category>();
        Category c = catRepository.FindOne<Category>(x => x.Name == "Paper");

        c.Name = "Paper";
        catRepository.SaveChanges(System.Data.Objects.SaveOptions.None);

1 Ответ

6 голосов
/ 19 октября 2010

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

«Чистым» POCO, как вы говорите, затрудняют отслеживание изменений.На самом деле, единственное, что вы можете сделать, это сравнить снимки объекта.Для этого у контекста объекта есть метод DetectChanges.

С псевдо-POCO-прокси у вас действительно есть тип, который во время компиляции выглядит (почти) как POCO и как не POCO вво время выполнения.Я говорю «почти», потому что во время выполнения вы получите экземпляр, который является подтипом типа времени компиляции.Из-за этого любые свойства, для которых вы хотите отслеживать изменения, должны быть не частными и виртуальными.Аналогичные ограничения применяются к отложенной загрузке.Вы можете прочитать больше об этом в этой серии статей в блоге команды ADO.NET.

...