2011-09-03 55 views

回答

2

讓我們來看看,如果我理解正確。

  1. 你有一個LINQ2SQL型號
  2. 你想一個.TT文件添加到使用上述模型生成的東西

如果這是正確的我會做什麼是項目一期工程加載.dbml文件(它是xml)並從中生成工件。

像這樣的東西可能(從DataClasses1.dbml產生一些班VS2010模板):

<#@ template language="C#" hostspecific="true" #> 
<#@ assembly name="System.Core"     #> 
<#@ assembly name="System.Xml"     #> 
<#@ assembly name="System.Xml.Linq"    #> 
<#@ import  nameSpace="System.Linq"    #> 
<#@ import  nameSpace="System.Xml.Linq"   #> 

namespace MyProgram 
{ 
    using System.Data.Linq.Mapping; 

<# 
    const string ns    = "{http://schemas.microsoft.com/linqtosql/dbml/2007}"; 
    const string DatabaseName = ns + "Database"; 
    const string TableName  = ns + "Table"; 
    const string TypeName  = ns + "Type"; 
    const string ColumnName  = ns + "Column"; 

    var xdoc = XDocument.Load (Host.ResolvePath ("DataClasses1.dbml")); 
    var tables = xdoc.Elements (DatabaseName).Elements (TableName); 

    foreach (var table in tables) 
    { 
     var types = table.Elements (TypeName); 

     foreach (var @type in types) 
     { 
      var columns = @type.Elements (ColumnName); 
#> 
    [Table (Name = "<#=GetAttribute (@type, "Name")#>")] 
    partial class <#=GetAttribute (@type, "Name")#> 
    { 
<# 
      foreach (var column in columns) 
      { 
#> 
     [Column (DbType = "<#=GetAttribute (column, "DbType")#>")] 
     public <#=GetAttribute (column, "Type")#> <#=GetAttribute (column, "Name")#> { get; set; } 
<# 
      } 
#> 
    } 
<# 
     } 
    } 
#> 

} 

<#+ 
    static string GetAttribute (XElement element, string name, string defaultValue = null) 
    { 
     if (defaultValue == null) 
     { 
      defaultValue = "<" + name + "_attribute_not_found>"; 
     } 
     if (element == null) 
     { 
      return defaultValue; 
     } 

     var attribute = element.Attribute (name ?? ""); 
     if (attribute != null) 
     { 
      return attribute.Value ?? defaultValue; 
     } 
     else 
     { 
      return defaultValue; 
     } 
    } 
#> 
+0

如果需要訪問源元素在該項目上如何去做這個博客提示:HTTP: //blogs.msdn.com/b/garethj/archive/2009/09/25/dte-and-t4-better-together.aspx – FuleSnabel

相關問題