Если бы вы разбили их на отдельные вопросы, вам бы повезло, если бы вы ответили на все ваши вопросы, но я все равно рассмотрю пару ваших вопросов:
Автоматическое сопоставление, Пользовательские соглашения иПереопределения
Если одно из ваших бизнес-требований заключается в том, что большинство свойств не должны быть обнуляемыми, то вы должны установить это значение по умолчанию, предоставив свое соглашение для автоматического обработчика.Посмотрите эту запись в блоге , как вы можете это сделать.
Затем, если у вас есть отображение, которое должно немного отличаться от ваших соглашений, то вы можете обеспечить автоматическое переопределение, реализуяIAutoMappingOverride<T>
где вы указываете только те столбцы / идентификаторы / отношения, которые являются аберрантными для соглашений.
Документация на вики FluentNHibernate на Переопределяет и Условные обозначения - этона самом деле очень хорошо, я настоятельно рекомендую прочитать его.
Только для чтения сущностей
Если бы я делал это, то я бы проигнорировал NHibernate, internal set
свойство называется что-то вроде IsReadonly { get; internal set; }
, когда объект извлекается откуда-то, что он должен быть доступен только для чтения, затем установите это свойство перед возвратом его вызывающей стороне.
Если у вас есть явный метод Save
дляхранилище, вы можете проверить это свойство и не делать реальное сохранение NHibernate, если оно true
.Если вы полагаетесь на грязную проверку NHibernate для сохранения в сеансе Flush
, то вы можете реализовать прослушиватель NHibernate, который не будет сохранять сущность, если это свойство будет true
.
Идентификаторы
Одно слово (акроним) GUID;Привет-ло может работать, но это может быть сложным и немного привередливым.Чтобы NHibernate правильно отслеживал объект, он должен иметь уникальный идентификатор.Если вы используете автоматические идентификаторы, то NHibernate будет отправляться в базу данных, чтобы получить идентификатор, когда вы Save
вашей сущности, и прежде чем вы Flush
.
Comb GUID решаютпроблемы, с которыми вы столкнетесь при использовании автоматических идентификаторов и hi-lo в обмен на то, что занимает немного больше места в вашей БД и памятиПри использовании автоматического картирования FluentNHibernate, если ваша сущность имеет GUID в качестве типа своего свойства Id
, она будет автоматически использовать стратегию Guid Comb .