我正在使用Fluent NHibernate AutoMappings来映射我的实体,包括一些组件对象。 其中一个组件对象包含如下属性:
public string Value
{
set _value = value;
}
这导致NHibernate.PropertyNotFoundException:“无法找到属性'值'的getter ......”
我想忽略这个属性。
我尝试为组件类创建IAutoMappingOverride,但出于同样的原因我无法使用AutoMapping<> .IgnoreProperty(x => x.Value)。 “属性或索引器'MyComponent.Value'不能在此上下文中使用,因为它缺少get访问器”
我也看过IComponentConvention,但无论如何都看不到改变这种约定的映射。
任何帮助将不胜感激......
由于
答案 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; }
}