Какова цель самостоятельного отслеживания сущностей? - PullRequest
40 голосов
/ 23 февраля 2011

Я читал о сущностях самообследования в .net и о том, как их можно сгенерировать из файла * .edmx. То, что я пытаюсь понять, это то, что генерация этих сущностей дает вам базовые сущности EF? Кроме того, некоторые люди упоминали сущности самопроверки и Silverlight, но почему бы вам использовать их, а не клиентскую часть или общие классы, генерируемые службами RIA?

В чем смысл самостоятельного отслеживания сущностей и зачем вы их используете?

Ответы [ 2 ]

41 голосов
/ 23 февраля 2011

Самостоятельные отслеживающие объекты (STE) являются реализацией набора изменений (предыдущая реализация .NET набора изменений была DataSet). Разница между STE и другими типами объектов (POCO, EntityObject) заключается в том, что общие типы объектов могут отслеживать изменения только при подключении к живому ObjectContext. Как только общая сущность отсоединена, она теряет способность отслеживать изменения. Это именно то, что решает STE. STE может отслеживать изменения, даже если вы отсоедините его от ObjectContext.

Обычное использование STE в автономных сценариях, таких как .NET для .NET связи через веб-сервисы. Первый запрос к веб-службе создаст и вернет STE (сущность отсоединяется при сериализации и ObjectContext живет только для обслуживания одного вызова). Клиент внесет изменения в STE и передаст их в другом вызове веб-службы. Служба сможет обрабатывать изменения, потому что у нее будет доступно внутреннее отслеживание изменений STE.

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

Имейте в виду, что STE не предназначены для совместимых решений, поскольку их функциональность основана на совместном использовании кода STE между сервером и клиентом.

15 голосов
/ 23 февраля 2011

Основная цель - помощь в разработке N-уровня.Поскольку они отслеживаются самостоятельно, вы можете сериализовать их, скажем, через службу WCF, а затем десериализовать их обратно, и они все равно будут знать, какие изменения были внесены, и ожидают обработки для базы данных.

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

http://blogs.msdn.com/b/efdesign/archive/2009/03/24/self-tracking-entities-in-the-entity-framework.aspx

...