废话不多说.直接进入正题.
此文章要求用户熟悉一下内容:
C# WinForm 编程开发. CodeSmith 模版编写 .
最终效果:
程序说明
为配合ssi框架整合 [2]基本参数位置 添加各种包的字符串传递.根据个人需求.自己开发.
核心说明
因需使用CodeSmith的api . 所以第一步 . 我们需要添加 CodeSmith 的Api 类库 . 在CodeSmith 安装成功后 . 我们可在CodeSmith 下搜索到以下 dll 文件.拷贝到行不路径下 . 并添加项目引用 .
清单:
具体每个类库如何使用,大家可通过vs中的对象浏览器自己查看
了解CodeSmith的朋友都知道 . CodeSmith 给我们提供了非常方便的数据源连接ui.在当前类库中.我们可以通过api中提供的类库来使用他们提供的数据源ui.
在SchemaExplorer.Design命名空间里包含很多以UI结尾的对象. 我们直接使用new关键字.可创建对象 . 所创建的随想包含ShowDialog()方法 . 与普通winform窗体调用类似 .这里给出事例代码
界面如图:
代码如下:
SchemaExplorer.Design.DataSourceUI dsu = new SchemaExplorer.Design.DataSourceUI();
dsu.ShowDialog();
多数 UI 对象使用方式大同小异 . 大家可以研究下 .
下一步就是生成代码:
CodeTemplateCompiler compiler = new CodeTemplateCompiler("..\\..\\StoredProcedures.cst");
compiler.Compile();
if (compiler.Errors.Count == 0)
{
CodeTemplate template = compiler.CreateInstance();
DatabaseSchema database = new DatabaseSchema(new SqlSchemaProvider(), @"Data Source=.\SQLEXPRESS;AttachDbFilename=PetShop.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;");
TableSchema table = database.Tables["Inventory"];
template.SetProperty("SourceTable", table);
template.SetProperty("IncludeDrop", false);
template.SetProperty("InsertPrefix", "Insert");
template.Render(Console.Out);
}
CodeTemplateCompiler : 为模版编译器 . 因为我们的模版使用c#代码进行别写 . 所以模版需要编译 .
compiler.Compile() : 该代码则为编译模版 .
compiler.Errors : 模版编译器下的容器对象 . 用来存储模版中的错误信息 . Errors.Count 为 0 说明模版正常,没有错误 .
CodeTemplate template = compiler.CreateInstance();
DatabaseSchema database = new DatabaseSchema(new SqlSchemaProvider(), @"Data Source=.\SQLEXPRESS;AttachDbFilename=PetShop.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;");
TableSchema table = database.Tables["Inventory"];
template.SetProperty("SourceTable", table);
template.SetProperty("IncludeDrop", false);
template.SetProperty("InsertPrefix", "Insert");
template.Render(Console.Out);
通过CodeTemplate 对象来填充模版参数 . 并获取生成结果 . 如下两个方法比较常用.
template.RenderToFile(路径,是否覆盖)
RenderToFile 需要注意的是:该方法所写的文件默认使用的 utf-8 com 编码 . 并非utf-8 . 请大家使用的时候多留心 .
template.RenderToString()
就到这里 : 转载请注明出处 [ 深度游子-扣扣:191817533 ] 如有问题可加QQ .