码迷,mamicode.com
首页 > 其他好文 > 详细

DataUml Design 教程5-代码模板介绍(甚于T4模板技术)

时间:2017-04-17 12:27:31      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:cti   des   uml关联   默认值   长度   ble   ecif   包含模型   primary   

       DataUml Design 代码模板全然基于C#语言来编写的。

不懂写模板的能够请教作者,随时欢迎。

以下是一段模板代码,这段代码能够获取一个类结构的全部信息。
            <#@ template language="C#" HostSpecific="True" #>
            <
            NetUmlTemplateCodeHost host = (NetUmlTemplateCodeHost)(Host);
            #>
            命名空间:<#= host.ClassProperty.Namespace #>
            类名:<#= host.ClassProperty.ClassName #>
            类中文名:<#= host.ClassProperty.ClassOtherName #>
            表名:<#= host.ClassProperty.TableName #>
            可訪问性:<#= host.ClassProperty.Accessibility==null?"":host.ClassProperty.Accessibility #>
            修饰符:<#= host.ClassProperty.Modifier==null?"":host.ClassProperty.Modifier #>
            用户:<#= host.ClassProperty.User==null?

"":host.ClassProperty.User #> 
            备注:<#= host.ClassProperty.Remarks #>
            数据库类型:<#= host.ClassProperty.DataAccessType #>
            语言:<#= host.ClassProperty.ProjectLanage #>
            字段:
            <# foreach(var f in host.ClassProperty.Fields)
            {
                WriteLine("    属性名:"+f.PropertyName);
                WriteLine("    属性别名:"+f.PropertyOtherName);
                WriteLine("    属性类型:"+f.DataType);
                WriteLine("    修饰符:"+f.Modifier);
                WriteLine("    可訪问性:"+f.Accessibility);
                WriteLine("    是否空类型:"+f.IsNullType);
                WriteLine("    初始值:"+f.InitialValue);
                WriteLine("    是否仅仅读:"+f.IsReadable);
                WriteLine("    是否可写:"+f.IsWritable);
                WriteLine("    字段名:"+f.FieldName);
                WriteLine("    字段类型:"+f.FieldType);
                WriteLine("    长度:"+f.FieldLength);
                WriteLine("    是否为空:"+f.IsNull);
                WriteLine("    是否主键:"+f.IsPrimaryKey);
                if(f.IsPrimaryKey)
                {
                    WriteLine("    主键类型:"+f.PrimaryKeyType);
                }
                WriteLine("    是否外键:"+f.IsForeignKey);
                WriteLine("    默认值:"+f.DefaultValue);
                WriteLine("    备注信息:"+f.Remarks);
                if(f.Attributes.Count>0)
                {
                    WriteLine("    属性:");
                    foreach(var p in f.Attributes)
                    {
                     WriteLine("        属性名:"+p.AttributeName);
                     WriteLine("        属性值:"+p.AttributeValue);
                    }
                }
                WriteLine("    ----------------");
            }
            #>

            类成员:

            表键信息:
            <# foreach(var k in host.ClassProperty.FieldKeyPropertys)
            {
                WriteLine(" 键名:"+k.KeyName);
                WriteLine(" 键类型:"+k.KeyType);
                WriteLine(" 字段:"+k.KeyFieldName);
                WriteLine(" 字段别名:"+k.KeyFieldOtherName);
                if(k.KeyType==KeyType.FOREIGN_KEY)
                {
                      WriteLine(" 约束名:"+k.ConstraintName);
                      WriteLine(" 约束表名:"+k.ConstraintTable);
                      WriteLine(" 约束表别名:"+k.ConstraintTableOtherName);
                      WriteLine(" 约束字段:"+k.ConstraintFields);
                      WriteLine(" 约束字段别名:"+k.ConstraintFieldsOtherName);      
                }
                WriteLine("----------------");
            }
            #>

            关联的类信息:
            <# foreach(RelationClass c in host.ClassProperty.RelationClasss)
            {
                WriteLine(" 关联类名:"+c.ClassProperty.ClassName);
                WriteLine(" 关联名称:"+c.RelationName);
                WriteLine(" 关联类型:"+c.TableRelationType);
                WriteLine(" UML关联类型:"+c.UmlRelationType);
                WriteLine(" IsConnectionLineStart:"+c.IsConnectionLineStart);
                WriteLine(" IsConnectionLineEnd:"+c.IsConnectionLineEnd);
                foreach(var f in c.RelationFields)
                {
                    WriteLine(" 关联字段:"+f[0]+""+"="+f[1]);        
                }
                WriteLine(" 多重性:"+c.Multiplicity[0]+","+c.Multiplicity[1]);
                WriteLine(    "----------------");
            }
            #> 
解说
            <#@ template language="C#" HostSpecific="True" #>
            <
            NetUmlTemplateCodeHost host = (NetUmlTemplateCodeHost)(Host);
            #>
            这段代码是必须的,它申明模板是採用哪种语言。

在模板里能够全然訪问NetUmlTemplateCodeHost 类里面的信息。这个类里面有个属性ClassProperty,这个属性包含模型中一个类的全部信息。
          < #> 全部语法代码都在这个符号里写
          host.ClassProperty.Fields中Fields属性是个集合,它包含全部字段信息
          以下是循环一个类中全部字段 

          <# foreach(var f in host.ClassProperty.Fields)
          {
          }
           #>

DataUml Design 教程5-代码模板介绍(甚于T4模板技术)

标签:cti   des   uml关联   默认值   长度   ble   ecif   包含模型   primary   

原文地址:http://www.cnblogs.com/jzssuanfa/p/6722323.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!