T4模板读取Web.comfig配置文件
引用:System.Web.Configuration,如:
<#@ Assembly Name="System.Web" #>
<#@ Import Namespace="System.Web.Configuration" #>
读取web.config配置的数据库连接字符串代码:
string projPath=Host.ResolveAssemblyReference("$(ProjectDir)");
string projPathSubstr=projPath.Substring(0,projPath.IndexOf("Common"));
string path = Path.Combine(projPathSubstr,"XFK.LYTravel.LYTravelApi");
VirtualDirectoryMapping vdm = new VirtualDirectoryMapping(path, true);
WebConfigurationFileMap wcfm = new WebConfigurationFileMap();
wcfm.VirtualDirectories.Add("/", vdm);
System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/");
ConnectionStringsSection connSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
var connectionString=connSection.ConnectionStrings["constringSlaveQuery"].ConnectionString;
全部代码:
<#@ template debug="True" hostspecific="True" language="C#" #>
<#@ Include File="MultipleOutputHelper.ttinclude" #>
<#@ Assembly Name="$(TargetDir)NLite.dll" #>
<#@ Assembly Name="$(TargetDir)ELinq.dll" #>
<#@ Assembly Name="System.Data" #>
<#@ Assembly Name="System.Web" #>
<#@ Import Namespace="System.Web.Configuration" #>
<#@ Import Namespace="NLite.Data" #>
<#@ Import Namespace="NLite.Data.CodeGeneration" #>
<#@ output extension=".cs" #>
<#
//System.Diagnostics.Debugger.Launch();
var manager = Manager.Create(Host, GenerationEnvironment);
var namespace1 = manager.DefaultProjectNamespace;
var connectionStringName = "constringSlaveQuery";
var dbContextName = Host.TemplateFile.Split('\\')[Host.TemplateFile.Split('\\').Length - 1].TrimEnd('.', 't');
//获取项目下的文件夹生成Cs的命名空间
var folders = Host.TemplateFile
.Substring(Host.TemplateFile.LastIndexOf(namespace1)+namespace1.Length)
.Replace(dbContextName+".tt","")
.TrimEnd('\\');
string projPath=Host.ResolveAssemblyReference("$(ProjectDir)");
string projPathSubstr=projPath.Substring(0,projPath.IndexOf("Common"));
string path = Path.Combine(projPathSubstr,"XFK.LYTravel.LYTravelApi");
VirtualDirectoryMapping vdm = new VirtualDirectoryMapping(path, true);
WebConfigurationFileMap wcfm = new WebConfigurationFileMap();
wcfm.VirtualDirectories.Add("/", vdm);
System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/");
ConnectionStringsSection connSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
var connectionString=connSection.ConnectionStrings["constringSlaveQuery"].ConnectionString;
var dbProviderName = "System.Data.SqlClient";
var dbConfiguration = DbConfiguration.Configure(connectionString,dbProviderName);
var databaseSchema =dbConfiguration.Schema;
//实体生成筛选器,只生成tab集合中有的表实体
List<String> tab = new List<String>();
tab.Add("Orders");
tab.Add("ElongOrdersDetails");
tab.Add("PaidXinfuCard");
tab.Add("Users");
tab.Add("UserModelContacts");
tab.Add("TicketCityMapping");
tab.Add("PICCOrder");
tab.Add("UserContacts");
tab.Add("JDContacts");
tab.Add("JDPassengers");
tab.Add("CertCardMapping");
tab.Add("EnterpriseEmployee");
manager.StartHeader();
#>
using System;
using System.Collections.Generic;
using System.Linq;
using NLite.Data;
namespace <#= namespace1 #><#= folders.Replace("\\",".") #>
{
<#
manager.EndBlock();
#>
using NLite.Reflection;
public partial class <#= dbContextName #>:DbContext
{
//连接字符串名称:基于Config文件中连接字符串的配置
const string connectionStringName = "<#= connectionStringName #>";
//构造dbConfiguration 对象
static DbConfiguration dbConfiguration;
static <#= dbContextName #>()
{
dbConfiguration = DbConfiguration
.Configure(connectionStringName)
.SetSqlLogger(() =>SqlLog.Debug)
.AddFromAssemblyOf<<#= dbContextName #>>(t=>t.HasAttribute<TableAttribute>(false))
;
}
public <#= dbContextName #>():base(dbConfiguration){}
<#foreach (var tb in databaseSchema.Tables.Union(databaseSchema.Views)){
if (tab!= null && tab.Count>0 && !tab.Contains(tb.TableName))
{
continue;
}
#>
public IDbSet<<#=NamingConversion.Default.ClassName(tb.TableName) #>> <#= NamingConversion.Default.QueryableName(tb.TableName) #> { get; private set; }
<#}#>
}
<#foreach (var tb in databaseSchema.Tables){
if (tab!= null && tab.Count>0 && !tab.Contains(tb.TableName))
{
continue;
}
manager.StartNewFile(NamingConversion.Default.ClassName(tb.TableName) + ".generated.cs");#>
[Table("<#= tb.TableName #>")]
public partial class <#= NamingConversion.Default.ClassName( tb.TableName) #>
{
<#foreach (var col in tb.PrimaryKeys){#>
[Id("<#= col.ColumnName#>",IsDbGenerated=<#= col.IsGenerated.ToString().ToLower() #>)]
public <#= NamingConversion.Default.DataType(col) #> <#= NamingConversion.Default.PropertyName(col.ColumnName) #> { get;set; }
<#}#>
<# //循环生成列
foreach (var col in tb.Columns){#>
[Column("<#= col.ColumnName#>",DbType = DBType.<#=col.DbType#>)]
public <#= NamingConversion.Default.DataType(col) #> <#= NamingConversion.Default.PropertyName(col.ColumnName) #> { get;set; }
<#}#>
<#
//循环生成关系表
foreach (var fk in tb.ForeignKeys){
if (tab!= null && tab.Count>0 && !tab.Contains(fk.OtherTable.TableName))
{
continue;
}
#>
[ManyToOne(ThisKey="<#= NamingConversion.Default.PropertyName( fk.ThisKey.ColumnName) #>",OtherKey="<#= NamingConversion.Default.PropertyName(fk.OtherKey.ColumnName) #>")]
public <#= NamingConversion.Default.ClassName(fk.OtherTable.TableName) #> <#= NamingConversion.Default.ManyToOneName(fk) #> { get;set; }
<#}#>
<#
//循环生成关系表
foreach (var fk in tb.Children){
if (tab!= null && tab.Count>0 && !tab.Contains(fk.OtherTable.TableName))
{
continue;
}
#>
[OneToMany(ThisKey="<#= NamingConversion.Default.PropertyName( fk.ThisKey.ColumnName) #>",OtherKey="<#= NamingConversion.Default.PropertyName(fk.OtherKey.ColumnName) #>")]
public IList<<#= NamingConversion.Default.ClassName(fk.OtherTable.TableName) #>> <#= NamingConversion.Default.QueryableName(fk.OtherTable.TableName) #> { get;set; }
<#}#>
}
<# } manager.EndBlock();
foreach (var tb in databaseSchema.Views){
if(true) continue;
manager.StartNewFile(NamingConversion.Default.ClassName(tb.TableName) + ".generated.cs");#>
[Table("<#= tb.TableName #>",Readonly=true)]
public partial class <#= NamingConversion.Default.ClassName( tb.TableName) #>
{
<#foreach (var col in tb.Columns){#>
[Column("<#= col.ColumnName#>")]
public <#= col.Type.Name #> <#= NamingConversion.Default.PropertyName(col.ColumnName) #> { get;set; }
<#}#>
}
<#
} manager.EndBlock();
manager.StartFooter();
#>
}
<#
manager.EndBlock();
manager.Process(true);
#>
参考:
http://blog.csdn.net/liyifei21/article/details/21087775
http://skybirdzw.blog.163.com/blog/static/725706262017723438407/

浙公网安备 33010602011771号