Остерегайтесь цветовых сдвигов при использовании PNG. Эта ссылка дает пример и содержит намного больше ссылок с дальнейшим объяснением:
http://www.hanselman.com/blog/GammaCorrectionAndColorCorrectionPNGIsStillTooHard.aspx
изображения GIF не подвергаются этой проблеме.
Краткий ответ на ваш вопрос в том, что это невозможно, но если нет необходимости в ленивой загрузке, необходимые изменения тривиальны.
В любом случае, вам придется добавлять конструкторы по умолчанию к классам, у которых их еще нет. Если вы готовы отказаться от отложенной загрузки, эти конструкторы по умолчанию могут быть закрытыми, и вам не нужно вносить никаких других изменений в модель вашей предметной области, чтобы использовать NHibernate.
Это ужасно близко к игнорированию настойчивости. 1270]. При этом, если вы хотите отложить загрузку, вам нужно будет внести несколько изменений (изложенных в других ответах на этот вопрос), чтобы NHibernate мог создавать прокси ваших агрегированных сущностей. Я' m лично все еще пытается решить, является ли отложенная загрузка технологией, обеспечивающей DDD, или это преждевременная оптимизация, требующая слишком большого количества навязчивых изменений в моих POCO. Я склоняюсь к первому, хотя мне бы очень хотелось, чтобы NHibernate можно было настроить для использования определенных конструкторов.
Вы также можете взглянуть на блог Дэви Бриона (мне особенно понравился Реализация объекта значения с NHibernate ]), что действительно полезно, если вы интересуетесь дизайном, ориентированным на предметную область, и избегаете анемичных моделей предметной области.
Вы также можете взглянуть на блог Дэви Бриона (мне особенно понравился Реализация объекта значения с NHibernate ), который действительно проливает свет, если вы интересуетесь дизайном на основе предметной области и избегаете анемичной области модели.
Вы также можете взглянуть на блог Дэви Бриона (мне особенно понравился Реализация объекта значения с NHibernate ), который действительно проливает свет, если вы интересуетесь дизайном на основе предметной области и избегаете анемичной области модели.
virtual
. This includes all reference properties and all collection properties. This is because NHibernate must be able to generate a proxy class deriving the mapped class and overriding the mapped property.IList
rather than List
. This is because the collections types in the .NET Framework tend to be sealed, and NHibernate must be able to replace a default instance of the collection type with its own instance of the collection type, and NHibernate has its own internal implementations of the collection types.Iesi.Collections.Generic.ISet
to System.Collections.Generic.IList
, unless you are sure that what you want is actually a list rather than a set. This requires being conversant in the theoretical definitions of list and set and in what your domain model requires. Use a list when you know that the elements must be in some specific order.Also note that it's typically not easy to swap object-relational mapping frameworks, and in many cases it is impossible, when you have anything beyond a trivial domain model.
По моему опыту, единственное, что NHibernate требует от домена, - это виртуальные свойства и методы, а также конструктор по умолчанию без аргументов, который, как сказал Джефф, может быть помечен как частный или защищенный, если это необходимо. Вот и все. NHibernate - мой выбор OR / M, и я считаю, что весь стек NHibernate (NHibernate, NHibernate Validator, Fluent NHibernate, LINQ to NHibernate) является наиболее убедительной структурой для сохранения доменов POCO.
Несколько вещей, которые вы можете сделать с помощью NHibernate:
Единственный компромисс, который вам нужно сделать, - это использовать атрибуты NHV в вашем домене. . Для меня это не препятствие, поскольку NHV - это автономный фреймворк, который добавляет дополнительные возможности, если вы решите использовать NHibernate.
Я создал несколько приложений с использованием NH, и у каждого из них есть домен, игнорирующий персистентность, со всеми проблемами персистентности, разделенными на его собственную сборку. Это означает, что одна сборка предназначена для вашего домена, а другая - для ваших быстрых сопоставлений, управления сеансами и интеграции проверки. Он очень красивый, чистый и хорошо справляется со своей работой.
Между прочим: у вас чертовски хороший английский, я бы хотел, чтобы мой французский был на должном уровне ;-).