Динамически свойство .Not.Insert (). Not.Update () Отображение беглого NHibernate - PullRequest
0 голосов
/ 03 апреля 2012

я использую Fluent NHibernate вместе с функцией автоматического преобразования!

В настоящее время я использую следующий оператор отображения для предотвращения обновления автоматически сгенерированных значений столбцов / insert

.Override<Entity>(map => map.Map(d => d.STATUS).Not.Insert().Not.Update())

Пока все работает нормально, но сейчас я ищу способ решить эту проблему более динамично.

Я бы хотел сделать следующее:

Я хочу объявить пользовательский атрибут с именем [ReadOnlyDbField], а затем объявить все свойства объекта с этим пользовательским атрибутом, чтобы сказать: просто прочитайте это значение и не обновляйте / вставляйте его.

Тогда я хочу указать конфигурацию отображения:

Map all properties with the custom attribute [ReadOnlyDbField] to Not.Insert().Not.Update()

Есть ли способ получить это?

Спасибо

Daniel

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Вы должны создать класс атрибута

public class NoInsertUpdateAttribute : Attribute
{

}

и другой класс для его соглашения:

public class NoInsertUpdateConvention : AttributePropertyConvention<NoInsertUpdateAttribute>
{
    protected override void Apply(NoInsertUpdateAttribute attribute, IPropertyInstance instance)
    {
        instance.Not.Insert();
        instance.Not.Update();
    }
}

и добавить контейнерную сборку класса NoInsertUpdateConvention в automap:

var fluentConfiguration = Fluently
            .Configure()
            .Mappings(
                m => {
                    var autoMap = AutoMap
                        .Conventions.AddFromAssemblyOf<NoInsertUpdateConvention>()
                }
            );

наконец, добавьте атрибут к свойству, которое вы не хотите вставлять или обновлять:

    [NoInsertUpdate]
    public virtual int? AccountID { get; set; }
0 голосов
/ 03 апреля 2012

Посмотрите на Сгенерированный метод

Map(x => x.Status).Generated.Never(); // or Insert() or Always()

Для автоматического применения посмотрите на условные обозначения , некоторые примеры здесь .

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