Отслеживает ли структура объекта изменения в POCO - PullRequest
2 голосов
/ 19 декабря 2009

Отслеживает ли структура сущностей 4.0 изменения в обычном старом объекте C #?

Если это так, должен ли мой класс сделать что-то особенное (реализовать интерфейс / вызвать события при изменении значения свойства?)

Кроме того, как я могу получить состояние (изменено / не изменено и т. Д.) POCO? Есть ли способ узнать «старые» значения свойств?

Ответы [ 4 ]

3 голосов
/ 19 декабря 2009

Я нашел POCO в Entity Framework: Часть 1. Опыт путем быстрого поиска в Google См. Часть 3 - Отслеживание изменений с помощью POCO .

Существует два типа отслеживания изменений возможности с POCO: Снимок отслеживание изменений и уведомления отслеживание изменений с помощью прокси. В этот пост, я хотел бы углубиться в оба варианта немного дальше и охватывают преимущества и недостатки оба, а также последствия используя любой подход.

1 голос
/ 19 декабря 2009

Если вы используете динамически сгенерированные прокси (это поведение по умолчанию для POCO, если ваши классы соответствуют требованиям), изменения ваших сущностей будут отслеживаться.

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

1 голос
/ 19 декабря 2009

Вопрос был изменен, чтобы задать вопрос о предстоящей поддержке .NET 4.0 для POCO. Ответ ниже касается существующей поддержки .net 3.5, как и было задано изначально. Информацию о поддержке .net 4.0 EF POCO см. В других ответах.


Нет. Текущая версия структуры сущностей не поддерживает POCO.

Для того, чтобы быть расходуемым EF, Классы сущностей должны:

  • Извлечь из класса EntityObject или реализовать хотя бы один обязательный IPOCO Интерфейс: IEntityWithChangeTracker. Если организация участвует в отношения это также должно реализовать Интерфейс IEntityWithRelationships. Реализация этих интерфейсов не трудно, но заставляет объекты сущности иметь зависимость от сборки EF, что иногда не желательно

  • Предоставление атрибутов уровня сборки, класса и свойства для определения отображение из пространства CLR в пространство модели (мы называем эти атрибуты отображения O-C)

  • Используйте классы отношений, предоставляемые Entity-Framework: EntityReference, EntityCollection и RelationshipManager вместо CLR коллекции (Список, ICollection)

источник

Самым простым способом создания классов, отвечающих этим требованиям, является использование дизайнера EF в Visual Studio для создания файла EDMX. Часть этого файла содержит CSDL, который определяет концептуальную модель ваших данных, другими словами - объекты. Файл EDMX также определяет SSDL (хранилище / база данных) и MSL (отображение между SSDL и CSDL). Именно этот CSDL будет использоваться для генерации классов, которые будут работать с EF.

Поддержка POCO появится в .net 4.0.

0 голосов
/ 19 декабря 2009

Я не знаю, как вы используете POCO с EF (без кода, отправленного с вопросом), однако, если вы используете сущности, созданные EF, вы можете отслеживать сделанные изменения. Эта статья MSDN объясняет это. Вы также можете прочитать это сообщение в блоге для получения более подробной информации. Если это вам не поможет, вы можете обновить свой вопрос с помощью примера кода, который показывает, как вы используете EF и как вы используете POCO с ним. Попытка показать пример того, что вы хотели бы видеть сделанным с вашими POCO, на примере макета кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...