光脚丫学LINQ(042):如何将列表示为由数据库生成的列
演示视频:http://u.115.com/file/f2bdf2a2da
演示说明
在本演示中,介绍了如何在对象模型中,使实体类的列成员来映射数据表中由数据库生成值的列;
也介绍了这种列成员自动获取数据库生成值的特性,及其实现办法;
在演示的结尾介绍了如何使用对象关系设计器来设置由数据库生成值的列。
另外说明一下,可能是因为我数学没有学好?
演示中竟然将订单编号11084念成了一千一百零八十四。这回真是糗大了!^_^
演示重点
什么是由数据库生成的列?
也就是列的数值由数据库自动生成,并不需要我们提供。比如自增长列、版本列等。
通过将实体类的列成员的ColumnAttribute特性的IsDbGenerated设置为true来表示由数据库生成的列。
据此可以推断,默认情况下IsDbGenerated属性值应该为false,这样的默认值是比较合理的。
如果实体类的某个列成员表示的是数据库生成的列,那么就不要试图为这些的列成员赋值,
虽然在代码中赋值是没有问题的,但所提供的数值是不会被保存在数据库中的。
这可以通过LINQ to SQL生成的SQL命令看出来,
无论是INSERT,还是UPDATE都不会包含IsDbGenrated=true的列成员。
如果实体类列成员的ColumnAttribute.IsDbGenerated设置为true的话,
那么当LINQ to SQL执行了添加或删除操作时,都会自动的获取这些列的值,即数据库生成的值。
因此,我们无需再次显式的使用LINQ to SQL去查询这个由数据库生成的值。
实际上,当LINQ to SQL发送更新或者添加SQL命令的时候,
同时也会发送一个获取数据库生成列的数值的SELECT命令。
示例代码
[Column(Storage="_OrderID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)] public int OrderID { get { return this._OrderID; } set { if ((this._OrderID != value)) { this.OnOrderIDChanging(value); this.SendPropertyChanging(); this._OrderID = value; this.SendPropertyChanged("OrderID"); this.OnOrderIDChanged(); } } }
2010-12-4 光脚丫思考