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

时间:2010-01-09 22:59:56

标签: nhibernate fluent-nhibernate

如何通过使用属性装饰属性来忽略属性?基类AttributePropertyConvention似乎没有这种能力,或者可以吗?在IPropertyInstance设置..

时找不到任何适合的东西

4 个答案:

答案 0 :(得分:3)

我尝试用两个建议中的任何一个创建一个约定,甚至两个都没有,似乎没有一个使用流利的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

这是旧的,我不知道它是否仍然相关,但这是我的经验。我希望这可以节省其他人尝试使用此解决方案或刺激其他人指出我可能出错的地方的麻烦。

答案 1 :(得分:0)

非常简单:

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

其中IgnoreAttribute是一个简单/空属性。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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