是否可以在T4模板中执行SQL(TSQL或Linq To SQL),以便表中的架构信息可用于自定义代码生成?
由于
答案 0 :(得分:1)
是的当然 - 您可以在T4模板中执行任何有效的.NET代码 - 毕竟该模板转换为.NET类,然后进行编译和执行。
你的问题是什么?你有什么尝试,你到底有多远?路障在哪里?
<强>更新强>
我尝试了以下方法:
AdventureWorksData
AdventureWorksData
议程有了这个设置,我可以写一个像这样的T4模板:
<#@ Template Language="C#v3.5" Debug="true" #>
<#@ Output Extension=".cs" #>
<#@ Assembly Name="System.Core.dll" #>
<#@ Assembly Name="System.Data.dll" #>
<#@ Assembly Name="System.Data.Linq.dll" #>
<#@ Assembly Name="AdventureWorksData.dll" #>
<#@ Import Namespace="System" #>
<#@ Import Namespace="System.Data" #>
<#@ Import Namespace="System.Data.Linq" #>
<#@ Import Namespace="System.Linq" #>
<#@ Import Namespace="AdventureWorksData" #>
using System;
using AdventureWorksData;
namespace AdventureWorks.Products
{
public class ProductList
{
<#
AdventureWorksDataContext ctx = new AdventureWorksDataContext();
var result = from p in ctx.Products
where p.ProductCategoryID == 5
select p;
foreach (Product product in result)
{
#>
public string <#= SanitizeName(product.Name) #> = "<#= product.ProductNumber #> / ID= <#= product.ProductID #>";
<#
}
#>
}
}
<#+
internal string SanitizeName(string input)
{
return input.Replace(" ", "_").Replace("-", "_").Replace("/", "_").Replace(".", "_").Replace(",", "_");
}
#>
我在这里做的是枚举AdventureWorksLT示例数据库中的Products
,并使用Linq获取ProductCategoryID == 5
的所有产品。
如您所见,您可以相当轻松地将Linq-to-SQL模型和LINQ查询合并到T4模板中。