到目前为止,我主要是编写表-列定义映射,使它们看起来与Linq2SQL风格相似。
如Linq2SQL
private Nullable<int> _MyColumn;
[Column( Name = "MyColumn", Storage = "_MyColumn", DbType = "int", CanBeNull = true )]
public Nullable<int> MyColumn { get { return _MyColumn; } set { _MyColumn= value; } }
BLToolkit
private Nullable<int> _MyColumn;
[MapField( "MyColumn", Storage = "_MyColumn" )]
public Nullable<int> MyColumn { get { return _MyColumn; } set { _MyColumn= value; } }
我认为这不是一个真正的问题,只是现在我不知道BLToolkit是否真的需要所有这些属性。我需要成员字段_MyValue或属性Storage吗?
BLToolkit wiki站点上的大多数示例只是使用以下样式来定义表列
[MapField( "MyColumn" )]
public Nullable<int> MyColumn { get; set; }
我的问题是。我需要在BLToolkit中使用私有setter吗?
是否有任何性能问题?
LINQ to SQL使用私有支持字段来允许IPropertyNotifyChanging/INotifyPropertyChanged实现以及部分方法允许您添加自己的自定义逻辑,数据绑定,并为上下文监视更新过程中的属性更改。你在使用自动实现属性时不会得到这些。在运行时使用autoprops不会提高性能,因为它们只是编译器为您生成的"匿名"私有支持字段的语法糖。
对于Storage属性,在LINQ to SQL中,它用于直接设置数据库读取时的私有支持字段,以绕过属性通知事件。例如,当INotifyPropertyChanged时,如果你有一个拦截器要监视。PropertyChanged被引发并将你的对象标记为dirty,如果你在获取对象时使用公共属性设置器,它将被标记为dirty,但如果你使用Storage指向私有字段,它将不会被标记为dirty。
以上所有内容都是特定于LINQ to SQL的,可能适用于也可能不适用于BLTooklit,因为我不熟悉它。