2011-01-24 73 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