微型项目实践(2):用测试驱动代码生成2011-11-24 博客园 冬冬上一篇文章中,我们分析了系统的两个实体类,并且给出了对应的实体XML。今天我们来看看如何根据 这个XML进行代码生成。
1: <?xml version="1.0" encoding="utf-8" ?> 2: <Entities xmlns="http://it.ouc.edu.cn/EntityDescription/V2"> 3: <Entity title="日志" name="Blog" module="Blogs"> 4: <Item title="标题" name="Title" type="text" require="true"/> 5: <Item title="内容" name="Content" type="longtext" require="false"/> 6: <Item title="所属分类" name="BlogClass" type="entity" entityName="BlogClass" require="false"/> 7: <Item title="创建时间" name="CreateDateTime" type="datetime" require="true"/> 8: <Item title="更新时间" name="UpdateDateTime" type="datetime" require="true"/> 9: </Entity> 10: <Entity title="日志分类" name="BlogClass" module="Blogs"> 11: <Item title="名称" name="Name" type="text" require="true"/> 12: <Item title="描述" name="Description" type="text" require="false"/> 13: </Entity> 14: </Entities>
这里我们主要是生成两种最重要的代码,一是数据库的建库脚本,二是实体的CS类。我们使用测试来驱动代码生成,在项目DongBlog.Test中添加一个新的单元测试:Util.cs。对应的代 码如下:
1: using ... 12: 13: namespace DongBlog.Test 14: { 15: /// <summary> 16: /// 数据库相关的工具方法 17: /// </summary> 18: [TestClass] 19: public class DatabaseUtil 20: { 21: /// <summary> 22: /// 构造建库脚本 23: /// </summary> 24: [TestMethod, Description("构造建库脚本")] 25: public void Util_CreateDatabaseScript() 26: { 27: var entities = getEntities(); 28: string sqlText = MsSqlServerScriptBuilder.getSqlScript(entities); 29: 30: Debug.WriteLine(""); 31: Debug.WriteLine("The following is the database creating script:"); 32: Debug.WriteLine("=============================彪悍的分割线=============================================================================="); 33: Debug.WriteLine(""); 34: Debug.WriteLine(""); 35: Debug.WriteLine(sqlText); 36: Debug.WriteLine(""); 37: Debug.WriteLine(""); 38: Debug.WriteLine("=============================又见彪悍的分割线=========================================================================="); 39: } 40: 41: private Entity[] getEntities() 42: { 43: XmlDocument document = new XmlDocument(); 44: document.Load(Gobal.EntityXmlFileName); 45: return EntityXmlParser.ParseXml(document); 46: } 47: } 48: }