2012-03-09 92 views
1

假設我有一個業務對象,它的某些屬性應該是隻讀的 。例如:BLToolkit:公共只讀屬性

public class Order 
{ 
    ... 
    public DateTime OrderDate { get; set; } 
    ... 
    public decimal OrderTotal { get; set; } 
} 

還假設的OrderTotal是由不能由應用程序來設置一個存儲過程返回的計算值(而訂購日期可以)。通常我只會寫的OrderTotal沒有公共的setter:

public decimal OrderTotal { get; private set; } 

但是,如果我這樣做BLToolkit將不再設置此屬性的值。我也已經嘗試將其作爲內部屬性編寫,並將BLToolkit定義爲朋友程序集 (InternalsVisibleTo("BLToolkit.4, PublicKey=xyz")),但沒有成功。

如何在沒有公共setter的情況下編寫一個屬性,該公共setter仍然可以由BLToolkit填充?

回答

4

上有MapField可屬性的存儲屬性,也許,這將有助於

public class Class1 
    { 
     int _int32 = 0; 
     [MapField(Storage = "_int32")] 
     public int Int32 
     { 
      get { return _int32; } 
     } 
    } 
+0

似乎這樣做,謝謝!你從哪裏瞭解到這個屬性? BLToolkit文檔似乎對此沒有提及。 – matk 2012-03-13 13:27:36

+0

我在Blt討論組http://groups.google.com/group/bltoolkit/browse_thread/thread/108cc68e68333af2 上了解了它但是在文檔中沒有提到它,但是它有一個單元測試MemberMapperTest類 – 2012-03-14 11:33:21

+0

謝謝,非常感謝。我喜歡BLToolkit,但文檔確實需要改進。 – matk 2012-03-15 09:13:08

0

我不認爲你可以這樣做,但如果我正確地理解你,你不需要它。如果OrderTotal從存儲過程返回,那麼如果將它保持原樣就好了。除非Order類代表數據庫中的實際Order表,否則如果意外更新OrderTotal,則不會有任何問題。

+0

這是事實,但我認爲它只是不健全的架構,如果我不得不改變我的課的邏輯佈局只是爲了滿足ORM,特別是如果它是公開可見的。我想知道爲什麼我無法獲得內部/內部可見性方法的工作? – matk 2012-03-12 07:44:58