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

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

  在上一篇文章中,介绍了如何访问 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

目录
相关文章
|
3月前
|
人工智能 前端开发 Devops
.NET技术在现代开发中的作用:.NET技术的核心价值、在现代应用开发中的实际应用、以及面临的挑战与未来趋势。
.NET技术是软件开发领域的核心力量,本文从其核心价值、实际应用及未来挑战三方面进行探讨。它支持多种语言,提供强大的开发工具和丰富的类库,并具备跨平台能力。在现代应用开发中,.NET广泛应用于企业级系统、Web应用、移动应用、云服务和游戏开发等领域。面对性能优化、容器化、AI集成等挑战,.NET持续创新以适应不断发展变化的技术环境。
60 4
|
3月前
|
人工智能 开发框架 .NET
.NET技术的强大功能:.NET技术的基础特性、在现代开发中的应用、以及它如何助力未来的软件开发。
.NET技术是软件开发领域的核心支柱,以其强大功能、灵活性及安全性广受认可。本文分三部分解析:基础特性如多语言支持、统一运行时环境;现代应用如企业级与Web开发、移动应用、云服务及游戏开发;以及未来趋势如性能优化、容器化、AI集成等,展望.NET在不断变化的技术环境中持续发展与创新。
115 4
|
3月前
|
人工智能 物联网 开发者
.NET技术在现代软件开发中的应用愈发广泛和深入
.NET技术是软件开发的关键支柱,本文分为三部分探讨其创新应用:最新进展如.NET 5/6统一平台、性能提升、跨平台支持增强、云集成优化及开源社区贡献;应用场景涵盖微服务架构、物联网、AI/机器学习、游戏及移动应用开发;未来发展潜力在于持续性能优化、云原生支持、新兴技术集成、生态扩张及教育培训加强。.NET正以其强大适应性和创新潜力引领软件开发的新方向。
47 3
|
3月前
|
人工智能 开发框架 .NET
如何掌握.NET技术,引领开发前沿:.NET技术的核心能力、在现代开发中的应用实践、以及如何通过.NET技术实现持续创新。
.NET技术已成为软件开发不可或缺的部分,本文分三部分探讨:核心能力如多语言支持、统一运行时环境、丰富的类库及跨平台能力;现代开发实践包括企业级应用、Web与移动开发、云服务及游戏开发;并通过性能优化、容器化、AI集成等方面实现持续创新,使开发者站在技术前沿。
64 3
|
28天前
|
人工智能 开发框架 C#
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)
|
28天前
|
人工智能 开发框架 Cloud Native
C#/.NET/.NET Core技术前沿周刊 | 第 9 期(2024年10.07-10.13)
C#/.NET/.NET Core技术前沿周刊 | 第 9 期(2024年10.07-10.13)
|
28天前
|
数据可视化 NoSQL C#
C#/.NET/.NET Core技术前沿周刊 | 第 8 期(2024年10.01-10.06)
C#/.NET/.NET Core技术前沿周刊 | 第 8 期(2024年10.01-10.06)
|
28天前
|
开发框架 .NET 开发工具
.NET 9 中 LINQ 新增的功能
.NET 9 中 LINQ 新增的功能
|
28天前
|
设计模式 开发框架 C#
C#/.NET/.NET Core技术前沿周刊 | 第 4 期(2024年9.1-9.8)
C#/.NET/.NET Core技术前沿周刊 | 第 4 期(2024年9.1-9.8)
|
2月前
|
人工智能 前端开发 开发工具
解读.NET 技术的开发潜力
本文全面介绍了.NET技术在软件开发领域的核心优势、创新应用及面临的挑战。.NET以其统一的开发平台、强大的工具和跨平台能力,成为企业级应用、Web应用乃至游戏开发的理想选择。然而,在性能优化、容器化及AI集成等方面仍需不断突破。通过积极拥抱开源和社区驱动模式,.NET将持续推动软件开发的进步。
55 1

热门文章

最新文章

下一篇
无影云桌面