как игнорировать свойство по атрибуту в nhibernate - PullRequest
1 голос
/ 10 января 2010

Как я могу игнорировать свойство, украсив свойство атрибутом? базовый класс AttributePropertyConvention, похоже, не обладает такой способностью или может? Не находит ничего подходящего на IPropertyInstance для установки ..

Ответы [ 4 ]

3 голосов
/ 25 июля 2012

Я попытался создать соглашение с любым из двух предложений, и даже с обоими, и ни одно из них, похоже, не работало с беглым nhibernate 1.3.0.727

public class IgnoreAttributeConvention : AttributePropertyConvention<IgnoreAttribute>
{
    protected override void Apply(IgnoreAttribute attribute, IPropertyInstance instance)
    {
        instance.ReadOnly();
    }
}


public class IgnoreAttributeConvention : AttributePropertyConvention<IgnoreAttribute>
{
    protected override void Apply(IgnoreAttribute attribute, IPropertyInstance instance)
    {
        instance.Access.None();
    }
}

public class IgnoreAttributeConvention : AttributePropertyConvention<IgnoreAttribute>
{
    protected override void Apply(IgnoreAttribute attribute, IPropertyInstance instance)
    {
        instance.Access.None();
        instance.ReadOnly();
    }
}

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

https://groups.google.com/forum/?fromgroups#!topic/fluent-nhibernate/PDOBNzdJcc4

Это старо, и я не знаю, актуально ли оно, но это был мой опыт. Я надеюсь, что это избавит кого-то еще от попыток использовать это решение или побудит кого-то другого указать, где я могу пойти не так.

0 голосов
/ 30 мая 2019

Следующий код предотвратит создание столбца в вашей базе данных.

public class MyEntity
{
    [NotMapped]
    public bool A => true;
}

public class AutomappingConfiguration : DefaultAutomappingConfiguration
{
    public override bool ShouldMap(Member member)
    {
        if (member.MemberInfo.GetCustomAttributes(typeof(NotMappedAttribute), true).Length > 0)
        {
            return false;
        }
        return base.ShouldMap(member);
    }
}
0 голосов
/ 01 января 2012

Метод instance.ReadOnly () указывает FNH не искать изменения свойства в базе данных. Чтобы полностью игнорировать свойство, необходимо вызвать instance.Access.None ().

0 голосов
/ 12 января 2010

это было очень легко:

public class IgnoreAttributeConvention : AttributePropertyConvention<IgnoreAttribute>
{
    protected override void Apply(IgnoreAttribute attribute, IPropertyInstance instance)
    {
        instance.ReadOnly();
    }
}

где IgnoreAttribute - это простой / пустой атрибут.

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