Linq to SQL T4 代码生成器 (三)访问设计器中的 Column 对象
2010-07-24 14:01 麦舒 阅读(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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 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的设计模式综述