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

  在上一篇文章中,介绍了如何访问 DataContext 对象,下面接着来讲解一下如何访问设计器中的表对象,并生成生体类代码。从 Northwind 数据库中拖一个表到设计器中。拖出来后,记得保存 dbml 文件,否则是无法访问到这个表的。 在这里拖的是 Catories 表,如下图所示:

  我们可以通过访问 DataContext.Tables 来访拖放到设计器中的表。代码如下:

<# for
each(ITable table in DataContext.Tables){

}#>

  现在再来看看关于 ITable 的对象成员:

  其中 Member 这个属性,指的是在 data context 实例中的成员名称,例如对于 Categories 表来说,这个 Member 就是 Categories。

  Name 属性指的是该表的名称,而 Type 指就是该表的映射类。我们都知道,在 Linq to SQL 中,一个表可以映射成到一个类(或者多个继承类中),Type 属性就是用来访问这些映谢类。新建一个 DataClasses.tt 模版文件,复制下面的代码:

<#@ 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 #>

{

}

<# } #>

}

  按保存后生成的代码如下:

using System.Data.Linq;

using System.Data.Linq.Mapping;

namespace DecodeDemo

{

[Table(Name="dbo.Categories")]

public class Category

{

}

}

  在这里可以看到,已经可以生成实体类了,当然,还有属性没有生成。(这个我们放在下一单文章中讲解)

  现在来看一下如何生成继承类。从 ToolBox 工具栏中拖一个 DataClass 对象到调计器中,然后命名为 MyCatory,并继承于 Category。

  通过访问 Type.SubTypes 成员来对于访问继承类。代码:

<# foreach(ITable table in DataContext.Tables){ #>

<#}#>

  完整的模版代码如下:

<#@ 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 #>

{

public partial class <#= DataContext.Name #> : ALinq.DataContext

{

public <#= DataContext.Name #>(string connection) :

base(connection)

{

}

<# foreach(ITable table in DataContext.Tables){ #>

public Table<<#= table.Type.Name #>> <#= table.Member #>

{

get

{

return this.GetTable<<#= table.Type.Name #>>();

}

}

<# } #>

}

}

  生成的代码如下:

代码using System.Data.Linq;

using System.Data.Linq.Mapping;

namespace DecodeDemo

{

public partial class DataClasses1DataContext : ALinq.DataContext

{

public DataClasses1DataContext(string connection) :

base(connection)

{

}

public Table<Category> Categories

{

get

{

return this.GetTable<Category>();

}

}

}

}

  先讲到这里吧,下一篇再讲解属性的生成。

  代码下载:http://files.cnblogs.com/ansiboy/ConsoleApplication2.zip

时间: 2024-12-03 08:29:03

Linq to SQL T4 代码生成器 (二)访问设计器中的 Table 对象的相关文章

一起谈.NET技术,Linq to SQL T4 代码生成器 (二)访问设计器中的 Table 对象

在上一篇文章中,介绍了如何访问 DataContext 对象,下面接着来讲解一下如何访问设计器中的表对象,并生成生体类代码.从 Northwind 数据库中拖一个表到设计器中.拖出来后,记得保存 dbml 文件,否则是无法访问到这个表的. 在这里拖的是 Catories 表,如下图所示: 我们可以通过访问 DataContext.Tables 来访拖放到设计器中的表.代码如下: <# foreach(ITable table in DataContext.Tables){ }#> 现在再来看看

Linq to SQL T4 代码生成器 (-)访问 DataContext 对象

这个工具,是在一个项目中提取出来的,现在免费提供给大家使用. 本文介绍的 Linq to SQL T4 代码生成器有如下特点: 1.支持 dbml 文件.能够访问 dbml 设计器中的对象. 2.可能通多修改模版来生成代码. 3.可以生成多个文件.比如:一个类一个文件. 准备: 1.T4 代码编辑器(goole 即可).尽管不是必须,但是为了方便代码的编辑,还是建议安装一个. 2.下载安装 Decode_VS2008 (必须). 开始: 1.创建一个项目.然后运行 LicenseFileGene

一起谈.NET技术,Linq to SQL T4 代码生成器 (-)访问 DataContext 对象

这个工具,是在一个项目中提取出来的,现在免费提供给大家使用. 本文介绍的 Linq to SQL T4 代码生成器有如下特点: 1.支持 dbml 文件.能够访问 dbml 设计器中的对象. 2.可能通多修改模版来生成代码. 3.可以生成多个文件.比如:一个类一个文件. 准备: 1.T4 代码编辑器(goole 即可).尽管不是必须,但是为了方便代码的编辑,还是建议安装一个. 2.下载安装 Decode_VS2008 (必须). 开始: 1.创建一个项目.然后运行 LicenseFileGene

cell5控件-cellweb5 control 未在设计器中启用 怎么处理

问题描述 cellweb5 control 未在设计器中启用 怎么处理 下列控件已成功添加到工具箱中,但未在活动器中启用 cell5controlcell5 control

qt设计器中ui文件打开

问题描述 qt设计器中ui文件打开 在ubuntu中点击打开ui文件不出现qt设计器选项,但是qt设计器已经安装了,只是安装在home目录下,是不是因为没有安装再根目录下没有相关链接的原因,怎么建立连接才能打开ui文件直接连接用qt设计器打开? 解决方案 windows 下这叫文件关联,Ubuntu 也可以设置link text

控件 System.Windows.Forms.LinkLabel 在设计器中引发了一个未经处理的异常,已被禁用。 异常:不允许所请求的注册表访问权。

问题描述 解决方案 解决方案二:你就拖了几个link就出这个问题?什么都没做?也许你该装系统了解决方案三:估计是电脑感染了360系列非法流氓病毒所致.要么想办法杀掉360系列非法流氓病毒,要么重装系统.解决方案四:以管理员身份运行VS解决方案五:以管理员身份运行VS正解解决方案六:求解以管理员身份仍然无法运行啊解决方案七:以管理员身份是无法运行啊.

VS2012中,**控件已成功添加到工具箱中,但未在活动设计器中启用

问题描述 有哪位帮帮忙啊 解决方案 解决方案二:我也是这个问题,你现在找到解决方法了么?解决方案三:顶,求解,我的项目用的.netFramework4.5,然后我把Windowsmediaplayer控件放到工具箱,也是同样的问题解决方案四:有人说用vs低版本可解决此问题解决方案五:引用1楼u013636797的回复: 我也是这个问题,你现在找到解决方法了么? 请问前辈解决了没,小弟也遇到同样问题,困扰两周了...解决方案六:引用2楼lk12230213的回复: 顶,求解,我的项目用的.netF

如何在控件的设计时得到窗体设计器中的所有控件

本文转载:http://www.cnblogs.com/Ricky81317/archive/2007/01/04/611942.html   近日开发了一些自定义控件,其中一个需要自定义一下设计时属性浏览器中的属性编辑器,因此从UITypeEditor中派生了一个类,我需要从窗体上遍历到所有TextBox显示到我自定义的属性编辑器中. 具体可以在 override 的 EditValue方法中实现: 1 public override object EditValue(System.Compo

LINQ to SQL实现数据访问通用基类

LINQ to SQL让人着迷,在.Net应用程序当中,.它提供了一种安全,强大和非常灵活的方式执行数据 访问,在当前微软传道者介绍上看,很容易上手. 不幸的是,当你对LINQ进行仔细研究后,我发现在多层架构中使用LINQ的并不是十分容易. 本文介绍用LINQ to SQL实现数据层的典型的问题点 ,并提供了一个简单,方便和灵活的方式来克服 它们. 本文附带的LING to SQL 实现数据访问通用类有以下的特点: 实现了存储库模式,你可以用不到10行代码执行LINQ实体类型的CRUD (Cre