Entity Framework 4 и публичные свойства - PullRequest
2 голосов
/ 06 мая 2010

Я работаю над проектом и использую Entity Framework 4 в качестве ORM. Я реализую классы POCO. Каждый пример, который я вижу с EF 4 и POCO, реализует все свойства с открытыми сеттерами. Это единственный способ использовать классы POCO с EF 4? Все мои сеттеры должны быть публичными?

Ответы [ 2 ]

1 голос
/ 06 мая 2010

Зависит от того, как вы используете свои сущности.

Сущности "POCO" - это своего рода ложь (в любых рамках). Истинные POCO, которые могут иметь частное или не виртуальное состояние и не обеспечивать сериализацию, не могут выполнять отслеживание изменений. Единственное, что вы можете сделать с ними в O / R-отображении, это материализовать их.

Так что, если люди говорят о картографировании «POCO», обычно существует некоторая форма компромисса, позволяющая отслеживать изменения. Они на самом деле не "POCO"; они "так называемые POCO".

Один из способов достижения компромисса - обнародовать все существующее государство. Затем вы можете отслеживать изменения с помощью снимков.

Еще один способ компромисса - сделать все постоянное состояние защищенным / виртуальным. Затем вы можете сделать отслеживание изменений через прокси. Необязательно, чтобы свойства были общедоступными.

EF не поддерживает параметризованные конструкторы (пока), поэтому внедрение конструкторов (вероятно, лучшее решение для вашего случая с "чистым" POCO) сейчас не вариант.

0 голосов
/ 06 мая 2010

Используйте генератор POCO http://visualstudiogallery.msdn.microsoft.com/en-us/23df0450-5677-4926-96cc-173d02752313

http://blogs.msdn.com/adonet/pages/walkthrough-poco-template-for-the-entity-framework.aspx

они являются виртуальными для отслеживания изменений (если это то, что вы хотите)

http://blogs.msdn.com/adonet/archive/2009/06/10/poco-in-the-entity-framework-part-3-change-tracking-with-poco.aspx

...