自动生成三层结构代码(2)--生成实体类

版权所有:基础软件。作者邮箱:sun.j.l.studio@gmail.com。本文首发于 http://www.cnblogs.com/FoundationSoft。文章转载请保持此版权信息并注明出处。

前一篇写了自动生成三层结构代码之概述和准备工作。这篇介绍自动生成实体类的部分。

最基本的实体类就是包含了一些个属性,这些属性与数据库的表一一对应。自动生成实体类的时候,就是根据表中各个字段及其类型,生成相应类型的类中的属性。其中稍微一点难点是如何取得数据库表中类型,以及如何转换成对应的C#类型。另外一个需要考虑的因素是要考虑数据库中有些字段是可以为空的,而当这个列类型是值类型(如int)时,则在C#中它总是有一个值,0或-1或者其他。这个时候需要将这种属性定义成为可空类型(如int?)。

代码很简单,如下。

 

1 #region 生成实体类代码
2  //生成实体类代码
3  public string generateEntityClass()
4 {
5 StringBuilder sb = new StringBuilder();
6 //定义类开始
7   sb.Append("public class " + table);
8 sb.Append(Environment.NewLine);
9 sb.Append("{");
10 //针对数据表中每一列生成一个类中的属性
11   foreach (DataColumn c in allColumns)
12 {
13 string type = c.DataType.Name;
14 sb.Append("public " + type );
15 //如果属性是值类型,而且数据库中允许为空,则将属性定义成可空类型
16 if (c.DataType.IsValueType)
17 if (c.AllowDBNull)
18 sb.Append("?");
19 sb.Append(" "+c.ColumnName + " { get; set; }");
20 sb.Append(Environment.NewLine);
21 }
22 sb.Append("}"+Environment.NewLine); //类结束
23 return sb.ToString();
24 }
25 #endregion

 

 

来测试一下这个方法,我用的表是Northwind中的Orders表,随便找的。

测试代码
[TestClass()]
public class AutoDatabaseTest
{

const string tableName = "Orders";
AutoDatabase target
= new AutoDatabase(tableName);
[TestMethod]
public void generateEntityClassTest()
{
string s = target.generateEntityClass();
Console.WriteLine(s);
}
}
[TestClass()]
public class AutoDatabaseTest
{

const string tableName = "Orders";
AutoDatabase target = new AutoDatabase(tableName);
[TestMethod]
public void generateEntityClassTest()
{
string s = target.generateEntityClass();
Console.WriteLine(s);
}
}

代码生成的结果如下。

自动生成的实体类代码
public class Orders
{
public Int32 OrderID { get; set; }
public String CustomerID { get; set; }
public Int32 EmployeeID { get; set; }
public DateTime OrderDate { get; set; }
public DateTime RequiredDate { get; set; }
public DateTime ShippedDate { get; set; }
public Int32 ShipVia { get; set; }
public Decimal Freight { get; set; }
public String ShipName { get; set; }
public String ShipAddress { get; set; }
public String ShipCity { get; set; }
public String ShipRegion { get; set; }
public String ShipPostalCode { get; set; }
public String ShipCountry { get; set; }
}
posted @ 2010-08-11 10:32  基础软件  阅读(1424)  评论(0编辑  收藏  举报