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

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

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


<# foreach(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-10-03 03:02:16

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

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

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

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

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

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

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

一起谈.NET技术,基于SQL Server 2008 Service Broker构建企业级消息系统

1.引言 Microsoft 在SQL Server 2005引入了服务代理 (Service Broker 简称SSB) 为技术支持代理设计模式和面向消息的中间件 (MOM) 的原则.Service Broker在SQL Server 2008上得到完善, SQL Server Service Broker 为消息和队列应用程序提供 SQL Server 数据库引擎本机支持. 这使开发人员可以轻松地创建使用数据库引擎组件在完全不同的数据库之间进行通信的复杂应用程序.开发人员可以使用 Servi

一起谈.NET技术,页面片段缓存(二)

在上一篇文章中,我介绍了我们用土法炼钢的方法,使用Velocity提供的自定义标签实现片段缓存.这样的方式虽然也解决了我们的问题,但还是引出了一些bug.而且还有点hack的味道(虽然我喜欢hack).实际上对于片段缓存,业界有成熟的解决方案,还有一个所谓的W3C标准:ESI(Edge Side Include) . ESI本身没有什么,只是一个XML的标签集合.ESI和SSI(Server Side Include)很相似,做过ASP开发的都熟悉这么一个标签: <!--#include src

一起谈.NET技术,Dojo Data Store——统一数据访问接口

无论在传统的桌面应用还是在主流的互联网应用中,数据始终占据着软件应用中的核心地位.当下,web2.0已经是一个让人们耳熟能详的词汇,而由此带来的数据的开放与共享,引领我们走入了海量数据时代.在今天的互联网上,数据的交互几乎成为了我们的终极诉求,可随之而来的数据多样性,信息的分布式存储及松耦合,以及数据量的几何级规模的膨胀也带来了数据组织上的难度的增大,与此同时,伴随着Ajax, RIA及面向服务的网络应用的发展,其所要求的客户端数据处理逻辑的复杂性不断增加,使得开发难度不断加大. 出于简化数据处

一起谈.NET技术,LINQ to SQL快速上手 step by step

前言       最近接连遇到几个朋友问我同一个问题,就是关于.NET平台上ORM框架的选择.我想在这个讲求效率的时代,谁也不想手写SQL或存储过程去访问数据库了.大家都知道,在Java平台上,ORM这一块基本是Hibernate的天下.当然,相对轻量级的iBatis也有不错的表现.      不过谈到.NET平台,ORM框架似乎相对混乱了点.很多朋友问我的时候,往往会这样问:NHibernate.NBear和Castle该选择哪个?而当我反问:为什么不适用微软自带的Linq to Sql呢?对

一起谈.NET技术,使用LINQ to SQL更新数据库(上):问题重重

在学习LINQ时,我几乎被一个困难所击倒,这就是你从标题中看到的更新数据库的操作.下面我就一步步带你走入这泥潭,请准备好砖头和口水,Follow me. 从最简单的情况入手 我们以Northwind数据库为例,当需要修改一个产品的ProductName时,可以在客户端直接写下这样的代码: // List 0NorthwindDataContext db = new NorthwindDataContext(); Product product = db.Products.Single(p =>

一起谈.NET技术,抛砖引玉:我看微软.NET各子技术领域之应用前景

从2002年发布.NET 1.0,历经8年发展,.NET发展到了4.0,已经成为一个庞大而复杂的软件开发与运行平台,其架构日益复杂,其应用领域也在不断地扩展,包容了"一堆"的子技术领域.在.NET 4.0即将发布之际,回顾一下已发布的各项.NET技术,看看哪些技术用得很火,哪些被打入冷宫,再猜猜.NET 4.0中可能会有哪些技术会得到"青睐",是件有意思的事. 1. 桌面应用程序开发技术( Windows Form和WPF) 在.NET桌面应用程序开发领域,Wind