CodeSmith for Nhibernate的问题:它是如何实现NHibernate.cst这个模板文件中引用NHibernate.class.cst这个模板中的代码的?
如何在NHibernate.cst这个模板文件中引用NHibernate.class.cst这个模板文件?
我们生成代码时只要Execute NHibernate.cst这一个模板就好了,分析代码我发现,NHibernate.cst这个模板显然是用到了NHibernate.class.cst和NHibernate.hbm.cst这个模板中的代码,但我怎么也没有找到NHibernate.cst文件对这两个模板的引用;
比如在C#中,如果要引用另一个文件中的方法,怎么也应该 using 一下这个类,但CodeSmith中既没看到对这两个模板的 Import,也没看到 Assembly;
请问CodeSmith是如何实现对另一个模板文件的引用的?
------解决方案--------------------public void Generate()
{
foreach(TableSchema sourceTable in SourceDatabase.Tables)
{
Response.Write(string.Format( "Processing Table {0} ... ", sourceTable.Name));
if (IsManyToManyTable(sourceTable))
{
Response.WriteLine( "skipped, many-to-many link table ");
}
else if (IsSubClassTable(sourceTable))
{
Response.WriteLine( "skipped, sub-class table ");
}
else if (sourceTable.PrimaryKey == null)
{
Response.WriteLine( "skipped, no primary key ");
}
else
{
try
{
string className = sourceTable.Name;
if (className.StartsWith(RemoveTablePrefix))
className = className.Substring(RemoveTablePrefix.Length);
string classFileName = className;
classFileName += ".cs ";
classFileName = Path.Combine(OutputDirectory, classFileName);
string mappingFileName = className + ".hbm.xml ";
mappingFileName = Path.Combine(OutputDirectory, mappingFileName);
this.ClassTemplate.SetProperty( "SourceTable ", sourceTable);
this.ClassTemplate.SetProperty( "Namespace ", Namespace);
this.ClassTemplate.SetProperty( "Assembly ", Assembly);
this.ClassTemplate.SetProperty( "RemoveTablePrefix ", RemoveTablePrefix);
this.ClassTemplate.SetProperty( "ForceId ", ForceId);
this.ClassTemplate.RenderToFile(classFileName, true);
Response.Write(string.Format( "{0} ", classFileName));
this.MappingTemplate.SetProperty( "SourceTable ", sourceTable);
this.MappingTemplate.SetProperty( "Namespace ", Namespace);
this.MappingTemplate.SetProperty( "Assembly ", Assembly);
this.MappingTemplate.SetProperty( "RemoveTablePrefix ", RemoveTablePrefix);
this.MappingTemplate.SetProperty( "ForceId ", ForceId);
this.MappingTemplate.RenderToFile(mappingFileName, true);
Response.WriteLine(string.Format( "{0} ", mappingFileName));
}
catch (Exception ex)
{
Response.WriteLine( "Error: " + ex);
}
}
}
}
不知道这个够不够