2012-03-09 131 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