如何使用Fluent Nhibernate的AutoPersistenceModel忽略组件的属性?

时间:2010-04-20 16:07:08

标签: fluent-nhibernate

我正在使用Fluent NHibernate AutoMappings来映射我的实体,包括一些组件对象。 其中一个组件对象包含如下属性:

public string Value 
{ 
  set _value = value; 
}

这导致NHibernate.PropertyNotFoundException:“无法找到属性'值'的getter ......”

我想忽略这个属性。

我尝试为组件类创建IAutoMappingOverride,但出于同样的原因我无法使用AutoMapping<> .IgnoreProperty(x => x.Value)。 “属性或索引器'MyComponent.Value'不能在此上下文中使用,因为它缺少get访问器”

我也看过IComponentConvention,但无论如何都看不到改变这种约定的映射。

任何帮助将不胜感激......

由于

5 个答案:

答案 0 :(得分:1)

您可以在映射文件中使用OverrideAll()。如果您不知道它将成为其成员的类型,那么您需要使用此版本将该成员指定为字符串。以下是Fluent Nhibernate Wiki的示例。

.OverrideAll(map =>  
{  
  map.IgnoreProperty("YourProperty");
});

答案 1 :(得分:1)

您可以使用:

Reveal.Member<Owner, object> ("Value")`.

例如

mapping.IgnoreProperty(Reveal.Member<Owner, object> ("Value")

Reveal.Member可以在任何地方使用Fluent NHibernate需要一个表达式。这可用于公开私有/受保护的属性和字段。

答案 2 :(得分:0)

如果您向属性添加私有Get方法,则可以使覆盖工作。

答案 3 :(得分:0)

我已尝试使用私有和受保护的get访问器,但除非访问者是公共的,否则覆盖将无法编译。

“属性或索引器不能在此上下文中使用,因为它缺少get访问器”

答案 4 :(得分:0)

您可以添加公共getter throw NotSupportedException以使编译器满意:

public virtual string Value 
{ 
    get { throw new NotSupportedException(); }
    set { _value = value; }
}