当前位置:编程学习 > C#/ASP.NET >>

用C#做一个实体类生成器

  老师要我们效仿.Net代码生成器,做一个功能差不多的。我现在求那位大哥教我做怎么样生成实体类就够了。万分感谢!! --------------------编程问答-------------------- 帮顶,有一个代码生成器的原码 --------------------编程问答-------------------- 代码生成器首先是为了生成特定的代码的,不是所有的操作都能完成的,所以呢一般都是先有一个基础的模板,然后生成的时候根据模板来进行一些改动。

    个人愚见,强忍别笑。呵呵 --------------------编程问答-------------------- 使用 CodeDOM 和 Emit 吧
网上的资料很多的 呵呵
祝好运! --------------------编程问答-------------------- Stream codeFile = File.Open(txt_TableCSName.Text.Trim()+".cs", FileMode.Create);
StreamWriter sw = new StreamWriter(codeFile);
CSharpCodeProvider cscp = new CSharpCodeProvider();
ICodeGenerator codeGenerator = cscp.CreateGenerator(sw); 
CodeGeneratorOptions cop = new CodeGeneratorOptions();
CodeSnippetCompileUnit cscu = new CodeSnippetCompileUnit("using System;\nusing System.Data;\nusing System.Collections;");
codeGenerator.GenerateCodeFromCompileUnit(cscu, sw, cop);
CodeNamespace cnsCodeDom = new CodeNamespace(txt_TableNSName.Text.Trim());
CodeTypeDeclaration clsDecl = new CodeTypeDeclaration();
clsDecl.Name = txt_TableCSName.Text.Trim();
clsDecl.IsClass = true;
clsDecl.TypeAttributes = TypeAttributes.Public;
cnsCodeDom.Types.Add(clsDecl);
CodeConstructor clsConstructor = new CodeConstructor();
clsConstructor.Attributes = MemberAttributes.Public;
clsDecl.Members.Add(clsConstructor);

for(int i=0;i<checkedListBox1.CheckedItems.Count;i++)
{
string strKey = checkedListBox1.CheckedItems[i].ToString();
CodeMemberField clsMember = new CodeMemberField();
clsMember.Name = "p" + strKey;
clsMember.Attributes = MemberAttributes.Private;
clsMember.Type = new CodeTypeReference(ht[strKey].ToString()); 
clsDecl.Members.Add(clsMember);
CodeMemberProperty property = new   CodeMemberProperty();
property.Name = strKey;
property.Type = new CodeTypeReference(ht[strKey].ToString());
property.Attributes = MemberAttributes.Public;
property.GetStatements.Add( new CodeMethodReturnStatement( new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "p" + strKey) ) );
property.SetStatements.Add( new CodeAssignStatement( new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),"p" + strKey), new CodePropertySetValueReferenceExpression()));

clsDecl.Members.Add(property);
}



codeGenerator.GenerateCodeFromNamespace(cnsCodeDom,sw,cop);

sw.Close();
codeFile.Close();


太长了,贴一段把,03的代码 --------------------编程问答-------------------- 代码生成器,好象很麻烦,看一下,帮顶. --------------------编程问答-------------------- 只是实体类的很简单,根据数据库系统表,找到要生成实体类的数据表中的字段,类型,然后拼出来就行了 --------------------编程问答--------------------    6楼的大哥麻烦你所详细点可以不? --------------------编程问答-------------------- 一般的实体类就是对应一个数据表的字段。可以利用sqlserver的系统表来查询你要生成表的字段信息比如:
select a.name as columnname,case when b.name = 'char' then 'string' 
   when b.name = 'varchar' then 'string'
 when b.name = 'int' then 'int' 
 when b.name = 'datetime' then 'DateTime'
 when b.name = 'smalldatetime' then 'DateTime' 
 when b.name = 'decimal' then 'decimal'
 else 'error' end as datatype
from syscolumns a 
inner join systypes b on (a.xtype=b.xtype)
where a.id=object_id('t_new_tmp_jgdm') //换成你自己的表
order by colorder
得到了字段信息后,你就拼字符串贝。按照下面类的形式拼出来,输出到一个txt文本就ok了
class A
{
    int _name;
    public int Name
    {
        get{ return this._name; }
        set{ this._name = value;}
    }
} --------------------编程问答-------------------- CodSmith可以有nHibernate实体类模版,可以供你参考 --------------------编程问答-------------------- C#实体、集合类生成器,连接数据库服务-》选择数据库-》选择表-》选择字段-》点击生成即可生成C#实体 C#集合类 
C#版源码下载地址:
http://d.download.csdn.net/down/317315/gongquan2008 --------------------编程问答-------------------- 你可以看一下动软的源代码
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,