NCodeGenerate 可以直接把生成的内容输出到文件.
这种机制是通过一个叫FileRender 的类实现的。现在通过一个例子来演示一下。
新建模板,在Model 中输入以下代码:
1 using System; 2 using System.ComponentModel; 3 4 using NCodeGenerateIDE; 5 using NCodeGenerate.DBSchema; 6 namespace DynamicCodeGenerate 7 { 8 public class myModel 9 { 10 11 private System.String _Namespace = string.Empty; 12 public System.String Namespace 13 { 14 get { return _Namespace; } 15 set { _Namespace = value; } 16 } 17 private System.String _RemoveTablePrefix = string.Empty; 18 public System.String RemoveTablePrefix 19 { 20 get { return _RemoveTablePrefix; } 21 set { _RemoveTablePrefix = value; } 22 } 23 private TableSchema _SourceTable; 24 [Editor(typeof(TableEditor), typeof(TableEditor))] 25 public TableSchema SourceTable 26 { 27 get { return _SourceTable; } 28 set { _SourceTable = value; } 29 } 30 private DatabaseSchema _DataBase; 31 [Editor(typeof(DataBaseEditor), typeof(DataBaseEditor))] 32 public DatabaseSchema DataBase 33 { 34 get { return _DataBase; } 35 set { _DataBase = value; } 36 } 37 private System.String _OutPutDir = string.Empty; 38 [Editor(typeof(FolderEditor), typeof(FolderEditor))] 39 public System.String OutPutDir 40 { 41 get { return _OutPutDir; } 42 set { _OutPutDir = value; } 43 } 44 45 46 } 47 }
注意:代码中的第38行,
[Editor(typeof(FolderEditor), typeof(FolderEditor))]
这句代码是定义输出路径的字段 public System.String OutPutDir 在属性设置界面中调用路径选择对话框。
设置这个特性后在属性设置时,可以出现如下界面:
第二步,在模板中输入如下代码:
1 @model DynamicCodeGenerate.myModel 2 @using NCodeGenerateIDE 3 4 @{ 5 6 7 foreach(var item in Model.DataBase.Tables) 8 { 9 FileRender render = new FileRender(Request.TemplatePath+"\\demo1.cg",Model.OutPutDir + "\\" +item.Name + ".cs"); 10 var model = render.Model; 11 12 13 model.Namespace = "myproc"; 14 model.RemoveTablePrefix = ""; 15 model.SourceTable = item; 16 17 18 19 render.Render(); 20 21 <text>TableName=@item.Name</text> 22 } 23 }
这里解释一下, 代码 FileRender render = new FileRender(Request.TemplatePath+"\\demo1.cg",Model.OutPutDir + "\\" +item.Name + ".cs"); 是产生一个FileRender 对象,一共有两个参数,第一个是 模板文件的路径,第二个输出文件的路径。 在上面的代码中,Request 是一个请求对象,是模板自带的属性。它有一个字段 TemplatePath 代表当前模板所在的路径。
生成好FileRender后 要给他的 Model 赋值。 代码 var model = render.Model; 获取 FileRender 的Model 对象,然后就是 逐一给给Model 的属性赋值。具体Model 有哪些属性,都是什么含义。
你要看 Request.TemplatePath+"\\demo1.cg" 对应的模板文件里边 Model 的定义了。
这里要着重强调一下 当前模板 的Model 类名,命名空间不能和被调用模板的 Model 的类名和命名空间冲突,否则运行时汇报绑定错误。
最后调用 render.Render(); 输入生成结果到文件中。
附: NCodeGenerate 新增了 NCodeGenerate.DBSchema 的文档,在下面的文档连接中。
附上下载地址:
文档:文档
NCodeGenerate 系列文章: