Linq to SQL T4 代碼生成器 (二)訪問設計器中的 Table 對象

作者: 麥舒  來源: 博客園  發布時間: 2010-07-23 13:31  閱讀: 1922 次  推薦: 1   原文鏈接   [收藏]  

  在上一篇文章中,介紹了如何訪問 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

1
0
 
標簽:C# LINQ to SQL
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()