【问题标题】:BLToolkit: Public read-only propertiesBLToolkit:公共只读属性
【发布时间】:2012-03-09 11:12:40
【问题描述】:

假设我有一个业务对象,它有一些属性应该 为只读。例如:

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

还假设 OrderTotal 是存储过程返回的计算值,应用程序无法设置(而 OrderDate 可以)。通常我会简单地编写没有公共设置器的 OrderTotal:

public decimal OrderTotal { get; private set; }

但是,如果我这样做,BLToolkit 将不再设置此属性的值。我也已经尝试将其编写为内部属性并将 BLToolkit 定义为朋友程序集 (InternalsVisibleTo("BLToolkit.4, PublicKey=xyz")) 没有成功。

如何在没有公共 setter 的情况下编写仍可由 BLToolkit 填充的属性?

【问题讨论】:

    标签: bltoolkit


    【解决方案1】:

    MapField 属性上有一个存储属性,也许会有帮助

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

    【讨论】:

    • 好像可以,谢谢!你是从哪里得知这个楼盘的? BLToolkit 文档似乎对此保持沉默。
    • 我在 Blt 讨论组 groups.google.com/group/bltoolkit/browse_thread/thread/… 上了解到它,但是文档中没有提到它,但是在 MemberMapperTest 类中有一个单元测试
    • 谢谢,不胜感激。我喜欢 BLToolkit,但文档确实需要改进。
    【解决方案2】:

    我认为你不能这样做,但如果我理解正确,你就不需要它。如果 OrderTotal 是从存储过程返回的,那么如果您保持原样就可以了。除非 Order 类代表数据库中的实际 Order 表,否则如果您不小心更新了 OrderTotal,则不会有任何问题。

    【讨论】:

    • 确实如此,但我认为如果我必须更改我的类的逻辑布局以满足 ORM 的要求,这不是一个合理的架构,特别是如果它是公开可见的。我想知道为什么我无法使用 internal/InternalsVisibleTo 方法?
    猜你喜欢
    • 1970-01-01
    • 2011-03-24
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多