2011-09-01 37 views
0

到目前为止,我主要是编写我的表列定义映射,因此它们看起来与Linq2SQL风格很相似。BLToolkit vs 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或属性存储

在BLToolkit维基网站的大多数例子只是使用下面的风格来定义表列

[MapField("MyColumn")] 
public Nullable<int> MyColumn { get; set; } 

所以我的问题是。我需要在BLToolkit中使用私人setter吗?

有或没​​有任何性能问题吗?

+0

不,你不需要使用这些私人setter,不知道任何性能问题,但我会认为这种差异将是微不足道的任何方式 –

回答

0

LINQ to SQL使用专用支持字段允许IPropertyNotifyChanging/INotifyPropertyChanged实现与部分方法一起允许您添加自己的自定义逻辑,数据绑定以及上下文以监视更新的属性更改处理。在使用自动实现的属性时,您不会获得这些内容。在运行时没有使用autopter的性能改进,因为它们只是编译器为您生成的“匿名”私有支持字段的语法糖。

至于存储属性,在LINQ to SQL中,它用于直接设置数据库读取的专用备份字段以绕过属性通知事件。例如,如果在引发INotifyPropertyChanged.PropertyChanged时要监视拦截器并将对象标记为脏,如果在获取对象时使用公共属性设置器,则它将被标记为脏,但如果使用存储指向私人领域,它不会被标记为肮脏。

以上所有内容都是针对LINQ to SQL的,可能适用或不适用于BLTooklit,因为我对此并不熟悉。

+0

或多或少我已经知道为什么Linq2SQL是存储属性。我不知道的是在BLToolkit中真的需要它。 –

+1

此主题可能有帮助:[链接](http://groups.google.com/group/bltoolkit/browse_thread/thread/108cc68e68333af2) –