2011-01-24 69 views
1

我最近从1.0迁移到Fluent NHibernate 1.1,并且迁移有一些突破性更改。流畅的NHibernate映射为只读属性

例如,在域模型字段等

public virtual string CustomerType 
    { 
     get { return /*computed value based on _Type which is a column in database */; } 

    } 

    public virtual string MemberType 
    { 
     get { return _Type; } 
     set { _Type = value; } 

    } 

使用不指定任何配置/公约很好地工作。现在它会抛出一个错误,指出“无法找到setter”。我看到的解决方案是创建一个成员变量,例如customerType或_customerType,或者将该变量放入受保护的setter中。

请注意,CustomerType依赖于从数据库检索到的另一个值。

我也看到了类似的替代品,其中http://support.fluentnhibernate.org/discussions/help/269-fluentnhibernate-11-automapper-doesnt-accept-read-only-properties-anymore的 是DefaultAutoMappingConfiguration覆盖如

public override bool ShouldMap(Member member) 
    { 
     if (member.IsProperty && !member.CanWrite) 
     { 
      return false; 
     } 

     return base.ShouldMap(member); 
    } 

但是,这意味着私人或受保护的制定者在映射是一起跳过等领域。

我正在寻找一个解决方案,当流利NHibernate不查找setter时,它没有指定,但映射私人/受保护的setter。

任何方向如何与此有关呢?

回答

1

如果这是唯一的映射或其中一个中断,然后手动忽略它/映射它与一个没有设置映射。否则,关闭将非可写属性映射为您列出的建议并映射任何异常。不确定你可以做很多其他的事情,缺乏自己的代码和解决问题。

UPDATE 我只是跑真为protected和private制定者测试和PropertyInfo.CanWrite回报。所以我不确定您发布的解决方案确实存在问题。

1

CustomerValue是否来自数据库,因为它是派生值?

如果它不删除虚拟并将其排除在映射中。

+0

是的。它是数据库中列的派生值。我也更新了这个问题。 – WorldIsRound 2011-01-24 23:01:49