用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#