如何在nhibernate中按属性忽略属性

如何在nhibernate中按属性忽略属性,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,如何通过使用属性装饰属性来忽略属性?基类AttributePropertyConvention似乎没有这种能力,或者可以吗?在IPropertyInstance上找不到任何可设置的内容 这很容易: public class IgnoreAttributeConvention : AttributePropertyConvention<IgnoreAttribute> { protected override void Apply(IgnoreAttribute attribu

如何通过使用属性装饰属性来忽略属性?基类
AttributePropertyConvention
似乎没有这种能力,或者可以吗?在
IPropertyInstance
上找不到任何可设置的内容

这很容易:

public class IgnoreAttributeConvention : AttributePropertyConvention<IgnoreAttribute>
{
    protected override void Apply(IgnoreAttribute attribute, IPropertyInstance instance)
    {
        instance.ReadOnly();
    }
}
公共类IgnoreAttributeConvention:AttributePropertyConvention
{
受保护的替代无效应用(IgnoreAttribute属性,IPropertyInstance实例)
{
ReadOnly();
}
}

其中IgnoreAttribute是简单/空属性

instance.ReadOnly()方法告诉FNH不要在数据库中查找属性的更改。要完全忽略该属性,您需要调用instance.Access.None()。

我尝试使用这两种建议中的任何一种创建约定,甚至两种建议都不起作用,而且似乎都不适用于fluent 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();
    }
}
公共类IgnoreAttributeConvention:AttributePropertyConvention
{
受保护的替代无效应用(IgnoreAttribute属性,IPropertyInstance实例)
{
ReadOnly();
}
}
公共类IgnoreAttributeConvention:AttributePropertyConvention
{
受保护的替代无效应用(IgnoreAttribute属性,IPropertyInstance实例)
{
Access.None();
}
}
公共类IgnoreAttributeConvention:AttributePropertyConvention
{
受保护的替代无效应用(IgnoreAttribute属性,IPropertyInstance实例)
{
Access.None();
ReadOnly();
}
}
我后来发现了这个google groups讨论,虽然以前的讨论指出不能使用约定忽略属性,但如果使用自动映射,则必须重写类映射


这已经很老了,我不知道它是否仍然相关,但这是我的经验。我希望这可以避免其他人尝试使用此解决方案时遇到的麻烦,或者促使其他人指出我可能出错的地方。

以下代码将阻止在数据库中生成列

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);
    }
}

你有没有想过如何只使用Fluent和Automapping忽略POCO上特定属性的映射?即使现在也很难找到这方面的信息。