代码改变世界

Linq to SQL T4 代码生成器 (三)访问设计器中的 Column 对象

  麦舒  阅读(1717)  评论(2编辑  收藏  举报

上一篇文章给大家介绍了Linq to SQL 设计器中 Table 对象的访问,本文主要介绍一下 Linq to SQL 设计器中 Column 对象的访问,要生成实体类的属性,必须通过访问 Column 对象。下面来看代码:

 

复制代码
<#@ template inherits="ModelingTextTransformation" language="C#" debug="true" hostspecific="True"#>
<#@ QuickCode processor="DbmlProcessor" requires="ModelFile='Northwind.dbml'"#>
<#@ output extension=".cs" #>
<#@ import namespace = "System.Text.RegularExpressions" #>

using System.Data.Linq;
using System.Data.Linq.Mapping;

namespace <#= DataContext.ContextNamespace #>
{
<# foreach(ITable table in DataContext.Tables){ #>
[Table(Name
="<#= table.Name #>")]
public class <#= table.Type.Name #>
{
<# foreach(IColumn column in table.Type.Columns){#>
[Column(Name
="<#= column.Name #>", UpdateCheck="<#= column.UpdateCheck #>")]
public <#= column.Type #> <#= column.Member #>
{
get;
set;
}
<#} #>
}
<# } #>

}
复制代码

 

 

生成代码如下:

 

复制代码
代码

using System.Data.Linq;
using System.Data.Linq.Mapping;

namespace DecodeDemo
{
[Table(Name
="dbo.Categories")]
public class Category
{
[Column(Name
="CategoryID", UpdateCheck="Never")]
public System.Int32 CategoryID
{
get;
set;
}
[Column(Name
="CategoryName", UpdateCheck="Never")]
public System.String CategoryName
{
get;
set;
}
[Column(Name
="Description", UpdateCheck="Never")]
public System.String Description
{
get;
set;
}
[Column(Name
="Picture", UpdateCheck="Never")]
public System.Data.Linq.Binary Picture
{
get;
set;
}
}

}
复制代码

 

 

 

我们要注意的是这一句:

 

<# foreach(IColumn column in table.Type.Columns){#>

 

 

很多朋友可能会有疑问,怎么 Columns 放在 Type 对象里,而不是 table 对象中呢?可能这样理解,在 Linq to SQL 设计器中,具有继承关系的多个类,都城是映射到同一个表的。也就是说,一个表 (ITable) 可以对应多个类 (IType),而每个类,都包含有一个或都多个列(IColumn)。也就是说,你通过 IType.Columns 访问到的列,不是表所包含的全部列,而只是一部份映到类属性的列(如果该类没有继承类则为全部)。

 

IColumn 的成员如下图所示,这些成员名称,使用过 Linq to SQL 的朋友都熟悉了,因此也不打算解释了。如果有任何疑问,请给我留言。完整的属性列表请点击:

http://www.alinq.org/document/decode.htm

 

完整代码以及示例请到本系列的第一篇文章那里下载:http://www.cnblogs.com/ansiboy/archive/2010/07/22/1782982.html

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示