首页 > 代码库 > T4 生成实体和简单的CRUD操作

T4 生成实体和简单的CRUD操作

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core.dll" #>
<#@ assembly name="System.Data.dll" #>
<#@ assembly name="System.Data.DataSetExtensions.dll" #>
<#@ assembly name="System.Xml.dll" #>
<#@ assembly name="MySql.Data" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Data" #>
<#@ import namespace=" System.Data.SqlClient" #>
<#@ import namespace="MySql.Data.MySqlClient" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Text.RegularExpressions" #><#+

	#region GetDbTables
    public class DbHelper
    {

		#region 去下划线,转大写
        public static string ToSplitFirstUpper(string file)
        {
            string[] words = file.Split(‘_‘);
            StringBuilder firstUpperWorld = new StringBuilder();
            foreach (string word in words)
            {
                string firstUpper = ToFirstUpper(word);
                firstUpperWorld.Append(firstUpper);
            }
            string firstUpperFile = firstUpperWorld.ToString().TrimEnd(new char[] { ‘_‘ });
            return firstUpperFile;
        }

        // 将字符串设置成首字母大写
        public static string ToFirstUpper(string field)
        {
            string first = field.Substring(0, 1).ToUpperInvariant();
            string result = first;
            if (field.Length > 1)
            {
                string after = field.Substring(1);
                result = first + after;
            }
            return result;
        }

        #endregion

        #region 生成简单的sql语句
        public static string GetInsertSql(string connectionString, string database, string tableName)
        {
            var list = GetDbColumns(connectionString, database, tableName);
            StringBuilder sb1 = new StringBuilder();
            StringBuilder sb2 = new StringBuilder();
            foreach (var item in list)
            {
                string field = item.Field;
                if (field.ToLower() == "id") continue;
                sb1.Append(field).Append(", ");
                sb2.Append("?").Append(field).Append(", ");
            }
            string s1 = sb1.ToString().Trim(new char[] { ‘,‘, ‘ ‘ });
            string s2 = sb2.ToString().Trim(new char[] { ‘,‘, ‘ ‘ });
            return string.Format("INSERT INTO {0}({1}) VALUES({2})", tableName, s1, s2);

        }

        public static string GetParameter(string connectionString, string database, string tableName, bool hasId)
        {
            var list = GetDbColumns(connectionString, database, tableName);
            StringBuilder sb = new StringBuilder();
            sb.Append("MySqlParameter[] paras = new MySqlParameter[] { \r\n");
            foreach (var item in list)
            {
                if (item.Field.ToLower() == "id" && !hasId) continue;
                sb.AppendFormat("				 new MySqlParameter(\"{0}\", this.{1}),\r\n", item.Field, ToSplitFirstUpper(item.Field));
            }
            string s = sb.ToString().Trim(new char[] { ‘,‘, ‘ ‘, ‘\r‘, ‘\n‘ });
            s = s + "\r\n			};\r\n";
            return s;
        }

        public static string GetUpdateSql(string connectionString, string database, string tableName)
        {
            var list = GetDbColumns(connectionString, database, tableName);
            StringBuilder sb1 = new StringBuilder();
            foreach (var item in list)
            {
                string field = item.Field;
                if (field.ToLower() == "id") continue;
                sb1.Append(field).Append(" = ").Append("?").Append(field).Append(", ");


            }
            string s1 = sb1.ToString().Trim(new char[] { ‘,‘, ‘ ‘ });
            return string.Format("UPDATE {0} SET {1} WHERE id = ?id", tableName, s1);

        }

        #endregion

        #region GetDbTables

        public static List<DbTable> GetDbTables(string connectionString, string database)
        {

            #region SQL
            string sql = string.Format("SHOW TABLE STATUS FROM {0};", database);
            #endregion
            DataTable dt = GetDataTable(connectionString, sql);
            return dt.Rows.Cast<DataRow>().Select(row => new DbTable
            {
                TableName = row.Field<string>("Name"),
                Rows = row.Field<UInt64>("Rows"),
                Comment = row.Field<string>("Comment")
            }).ToList();
        }
        #endregion

        #region GetDbColumns

        public static List<DbColumn> GetDbColumns(string connectionString, string database, string tableName)
        {
            #region SQL
            string sql = string.Format("SHOW FULL COLUMNS FROM {0} FROM {1};", tableName, database);
            #endregion
            DataTable dt = GetDataTable(connectionString, sql);
            return dt.Rows.Cast<DataRow>().Select(row => new DbColumn
            {
                IsPrimaryKey = !String.IsNullOrEmpty(row.Field<string>("Key")),
                Field = row.Field<string>("Field"),
                Type = row.Field<string>("Type"),
                Comment = row.Field<string>("Comment"),
                IsNullable = row.Field<string>("NULL") == "YES"
            }).ToList();
        }

        #endregion


        #region GetDataTable

        public static DataTable GetDataTable(string connectionString, string commandText, params SqlParameter[] parms)
        {
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                MySqlCommand command = connection.CreateCommand();
                command.CommandText = commandText;
                command.Parameters.AddRange(parms);
                MySqlDataAdapter adapter = new MySqlDataAdapter(command);

                DataTable dt = new DataTable();
                adapter.Fill(dt);

                return dt;
            }
        }

        #endregion
    }
    #endregion

    #region DbTable
    /// <summary>
    /// 表结构
    /// </summary>
    public sealed class DbTable
    {
        /// <summary>
        /// 表名称
        /// </summary>
        public string TableName { get; set; }

        /// <summary>
        /// 行数
        /// </summary>
        public UInt64 Rows { get; set; }

        /// <summary>
        /// 描述信息
        /// </summary>
        public string Comment { get; set; }
    }
    #endregion

    #region DbColumn
    /// <summary>
    /// 表字段结构
    /// </summary>
    public sealed class DbColumn
    {
        /// <summary>
        /// 是否主键
        /// </summary>
        public bool IsPrimaryKey { get; set; }
        /// <summary>
        /// 字段名称
        /// </summary>
        public string Field { get; set; }
        /// <summary>
        /// 字段类型 int(11)
        /// </summary>
        public string Type { get; set; }
        /// <summary>
        /// 字段类型int
        /// </summary>
        public string ColumnType
        {
            get
            {
                return Type.IndexOf(‘(‘) == -1 ? Type : Type.Substring(0, Type.IndexOf(‘(‘));
            }
        }
        /// <summary>
        /// 数据库类型对应的C#类型
        /// </summary>
        public string CSharpType
        {
            get
            {
                return MysqlDbTypeMap.MapCsharpType(ColumnType);
            }
        }
        /// <summary>
        /// 
        /// </summary>
        public Type CommonType
        {
            get
            {
                return MysqlDbTypeMap.MapCommonType(ColumnType);
            }
        }
        /// <summary>
        /// 描述
        /// </summary>
        public string Comment { get; set; }
        /// <summary>
        /// 是否允许空
        /// </summary>
        public bool IsNullable { get; set; }

        /// <summary>
        /// 字符长度
        /// </summary>
        public int CharLength
        {
            get
            {
                Regex regex = new Regex(@"(?<=\()\d*?(?=\))", RegexOptions.Singleline);
                if (regex.IsMatch(Type))
                {
                    Match match = regex.Match(Type);
                    while (match != null && match.Success)
                    {
                        int charLength;
                        if (Int32.TryParse(match.Value, out charLength))
                        {
                            return charLength;
                        }
                    }
                }
                return 0;
            }
        }
    }
    #endregion

    #region SqlServerDbTypeMap

    public class MysqlDbTypeMap
    {
        public static string MapCsharpType(string dbtype)
        {
            if (string.IsNullOrEmpty(dbtype)) return dbtype;
            dbtype = dbtype.ToLower();
            string csharpType = "object";
            switch (dbtype)
            {
                case "bigint": csharpType = "long"; break;
                case "binary": csharpType = "byte[]"; break;
                case "bit": csharpType = "bool"; break;
                case "char": csharpType = "string"; break;
                case "date": csharpType = "DateTime"; break;
                case "datetime": csharpType = "DateTime"; break;
                case "datetime2": csharpType = "DateTime"; break;
                case "datetimeoffset": csharpType = "DateTimeOffset"; break;
                case "dityint": csharpType = "bool"; break;
                case "decimal": csharpType = "decimal"; break;
                case "float": csharpType = "double"; break;
                case "image": csharpType = "byte[]"; break;
                case "int": csharpType = "int"; break;
                case "money": csharpType = "decimal"; break;
                case "nchar": csharpType = "string"; break;
                case "ntext": csharpType = "string"; break;
                case "numeric": csharpType = "decimal"; break;
                case "nvarchar": csharpType = "string"; break;
                case "real": csharpType = "Single"; break;
                case "smalldatetime": csharpType = "DateTime"; break;
                case "smallint": csharpType = "short"; break;
                case "smallmoney": csharpType = "decimal"; break;
                case "sql_variant": csharpType = "object"; break;
                case "sysname": csharpType = "object"; break;
                case "text": csharpType = "string"; break;
				case "longtext": csharpType = "string"; break;
                case "time": csharpType = "TimeSpan"; break;
                case "timestamp": csharpType = "byte[]"; break;
                case "tinyint": csharpType = "byte"; break;
                case "uniqueidentifier": csharpType = "Guid"; break;
                case "varbinary": csharpType = "byte[]"; break;
                case "varchar": csharpType = "string"; break;
                case "xml": csharpType = "string"; break;
                default: csharpType = "object"; break;
            }
            return csharpType;
        }

        public static Type MapCommonType(string dbtype)
        {
            if (string.IsNullOrEmpty(dbtype)) return Type.Missing.GetType();
            dbtype = dbtype.ToLower();
            Type commonType = typeof(object);
            switch (dbtype)
            {
                case "bigint": commonType = typeof(long); break;
                case "binary": commonType = typeof(byte[]); break;
                case "bit": commonType = typeof(bool); break;
                case "char": commonType = typeof(string); break;
                case "date": commonType = typeof(DateTime); break;
                case "datetime": commonType = typeof(DateTime); break;
                case "datetime2": commonType = typeof(DateTime); break;
                case "datetimeoffset": commonType = typeof(DateTimeOffset); break;
                case "dityint": commonType = typeof(Boolean); break;
                case "decimal": commonType = typeof(decimal); break;
                case "float": commonType = typeof(double); break;
                case "image": commonType = typeof(byte[]); break;
                case "int": commonType = typeof(int); break;
                case "money": commonType = typeof(decimal); break;
                case "nchar": commonType = typeof(string); break;
                case "ntext": commonType = typeof(string); break;
                case "numeric": commonType = typeof(decimal); break;
                case "nvarchar": commonType = typeof(string); break;
                case "real": commonType = typeof(Single); break;
                case "smalldatetime": commonType = typeof(DateTime); break;
                case "smallint": commonType = typeof(short); break;
                case "smallmoney": commonType = typeof(decimal); break;
                case "sql_variant": commonType = typeof(object); break;
                case "sysname": commonType = typeof(object); break;
                case "text": commonType = typeof(string); break;
                case "time": commonType = typeof(TimeSpan); break;
                case "timestamp": commonType = typeof(byte[]); break;
                case "tinyint": commonType = typeof(byte); break;
                case "uniqueidentifier": commonType = typeof(Guid); break;
                case "varbinary": commonType = typeof(byte[]); break;
                case "varchar": commonType = typeof(string); break;
                case "xml": commonType = typeof(string); break;
                default: commonType = typeof(object); break;
            }
            return commonType;
        }
    }
    #endregion

#>

主要跟大家交流下T4,我这里针对的是mysql,我本人比较喜欢用mysql,所以语法针对mysql,所以你要准备mysql的DLL了,同理sqlserver差不多,有兴趣可以自己写写,首先网上找了一个T4的帮助类,得到一些数据库属性,命名为 DbHelper.ttinclude


在加一个c#的sql帮助类, 命名为DBHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Security.Cryptography;
using System.Configuration;
using MySql.Data.MySqlClient;
using System.Reflection;
using System.Text;

namespace ToolSite.Entity
{

    public class DBHelper
    {
        //添加到配置文件的<configuration>节点中
        //   <connectionStrings>
        //       <!--改写数据库名,登陆名,密码-->
        //        <add name="conStr" connectionString="Data Source=.;Initial Catalog=;User ID=;Password="/>
        //  
        //   </connectionStrings>
        //<appSettings>
        //      <add key="dbConnection" value=http://www.mamicode.com/"server=192.168.1.111/SQL2005;database=GCUMS;UID=sa;PWD=sa;max pool size=20000;Pooling=true;"/>>

再家一个主要的T4文件,命名为 Entity.tt

<#@ include file="$(ProjectDir)Entity/DbHelper.ttinclude"#>
using System;
using MySql.Data.MySqlClient;
using System.Data;
using System.Collections.Generic;
namespace ToolSite.Entity
{
	public class Config
	{
		public static string DefaultDb = "<#=config.DbDatabase#>";
		public static string ConnStr = "<#=config.ConnectionString#>";
	}
		
<#foreach(var table in DbHelper.GetDbTables(config.ConnectionString, config.DbDatabase)){#>
<# string tableName = DbHelper.ToSplitFirstUpper(table.TableName); #>
	public partial class <#=tableName#>
    {
		#region Field
<# foreach(DbColumn column in DbHelper.GetDbColumns(config.ConnectionString, config.DbDatabase, table.TableName)){#>
		/// <summary>
        /// <#= column.Comment#>
        /// </summary>
		public <#= column.CSharpType#> <#=DbHelper.ToSplitFirstUpper(column.Field)#> { get; set; }
<#}#>		#endregion

		public int Save()
		{
			<#=DbHelper.GetParameter(config.ConnectionString, config.DbDatabase, table.TableName, false)#>
			string sql = "<#=DbHelper.GetInsertSql(config.ConnectionString, config.DbDatabase, table.TableName)#>";
		return DBHelper.NoneQuery(sql, paras);
		}
		
		public int Update()
        {

            <#=DbHelper.GetParameter(config.ConnectionString, config.DbDatabase, table.TableName, true)#>
			string sql = "<#=DbHelper.GetUpdateSql(config.ConnectionString, config.DbDatabase, table.TableName)#>";
            return DBHelper.NoneQuery(sql, paras);

        }

		public static int Delete(int id)
        {
            string sql = string.Format("DELETE FROM <#=table.TableName#> WHERE id = {0}", id);
            return DBHelper.NoneQuery(sql);

        }

		public static <#=tableName#> GetById(int id)
        {
            string sql = string.Format("SELECT * FROM <#=table.TableName#> WHERE id = {0}", id);
            DataTable table = DBHelper.GetDateTable(sql);
			List<<#=tableName#>> list = new DatatableFill<<#=tableName#>>().FillModel(table);
            //List<<#=tableName#>> list = Mapper.DynamicMap<IDataReader, List<<#=tableName#>>>(table.CreateDataReader());
            if (list == null || list.Count == 0) return null;
            return list[0];
        }

		public static List<<#=tableName#>> GetList()
        {
            string sql = "SELECT * FROM <#=table.TableName#>";
            DataTable table = DBHelper.GetDateTable(sql);
			List<<#=tableName#>> list = new DatatableFill<<#=tableName#>>().FillModel(table);
            //List<<#=tableName#>> list = Mapper.DynamicMap<IDataReader, List<<#=tableName#>>>(table.CreateDataReader());
            return list;

        }

		public static List<<#=tableName#>> Find(string where)
        {
            string sql = string.Format("SELECT * FROM <#=table.TableName#> WHERE {0};", where);
            DataTable table = DBHelper.GetDateTable(sql);
            return new DatatableFill<<#=tableName#>>().FillModel(table);
        }

        public static List<<#=tableName#>> Find(string field, string prop)
        {
            return Find(string.Format(" {0} = ‘{1}‘ ", field, prop));

        }

        public static bool Exist(string field, string prop)
        {
            int n = Count(field, prop);
            return n > 0 ? true : false;
        }

        public static int Count(string where)
        {
            string sql = string.Format("SELECT COUNT(1) FROM <#=table.TableName#> WHERE {0}", where);
            DataTable table = DBHelper.GetDateTable(sql);
            return Convert.ToInt32(table.Rows[0][0]);
        }

        public static int Count(string field, string prop)
        {
            return Count(string.Format(" {0} = ‘{1}‘ ", field, prop));
        }

        public static int Count()
        {
            return Count(" 1 = 1 ");
        }

        public static List<<#=tableName#>> Find(int index, int size, ref int count)
        {
            count = Count(" 1 = 1 ");
            string sql = string.Format(" 1 = 1 Order by id desc  LIMIT {0}, {1} ", index * size , size);
            return Find(sql);
        }

        public static List<<#=tableName#>> Find(string field, string prop, int index, int size, ref int count)
        {
            count = Count(field, prop);
            string sql = string.Format(" {0} = {1} Order by id desc LIMIT {2}, {3} ", field, prop, index, size);
            return Find(sql);
        }
    }

<#}#>
}

<#+
	class config
    {
        public static readonly string ConnectionString = "Server=127.0.0.1;Database=toolsite;Uid=root;Pwd=root;";
        public static readonly string DbDatabase = "toolsite";
    }
#>


你需要改的是最后那个文件的这个位置

    class config
    {
        public static readonly string ConnectionString = "Server=127.0.0.1;Database=toolsite;Uid=root;Pwd=root;";
        public static readonly string DbDatabase = "toolsite";
    }

怎么改我相信你懂的,点击下保存,你的实体类,跟数据库操作就生成了

最后生成的代码是这样子的,还是蛮粗糙的,如果你愿意改改,我相信会更好的!!!

using System;
using MySql.Data.MySqlClient;
using System.Data;
using System.Collections.Generic;
namespace ToolSite.Entity
{
	public class Config
	{
		public static string DefaultDb = "toolsite";
		public static string ConnStr = "Server=127.0.0.1;Database=toolsite;Uid=root;Pwd=root;";
	}
		
	public partial class PageInfo
    {
		#region Field
		/// <summary>
        /// 
        /// </summary>
		public int Id { get; set; }
		/// <summary>
        /// 
        /// </summary>
		public int SiteId { get; set; }
		/// <summary>
        /// 
        /// </summary>
		public int ParentId { get; set; }
		/// <summary>
        /// 
        /// </summary>
		public string FileName { get; set; }
		/// <summary>
        /// 
        /// </summary>
		public string Content { get; set; }
		/// <summary>
        /// 
        /// </summary>
		public string Title { get; set; }
		/// <summary>
        /// 
        /// </summary>
		public string Keywords { get; set; }
		/// <summary>
        /// 
        /// </summary>
		public string Description { get; set; }
		/// <summary>
        /// 
        /// </summary>
		public string H1 { get; set; }
		#endregion

		public int Save()
		{
			MySqlParameter[] paras = new MySqlParameter[] { 
				 new MySqlParameter("site_id", this.SiteId),
				 new MySqlParameter("parent_id", this.ParentId),
				 new MySqlParameter("file_name", this.FileName),
				 new MySqlParameter("content", this.Content),
				 new MySqlParameter("title", this.Title),
				 new MySqlParameter("keywords", this.Keywords),
				 new MySqlParameter("description", this.Description),
				 new MySqlParameter("h1", this.H1)
			};

			string sql = "INSERT INTO page_info(site_id, parent_id, file_name, content, title, keywords, description, h1) VALUES(?site_id, ?parent_id, ?file_name, ?content, ?title, ?keywords, ?description, ?h1)";
		return DBHelper.NoneQuery(sql, paras);
		}
		
		public int Update()
        {

            MySqlParameter[] paras = new MySqlParameter[] { 
				 new MySqlParameter("id", this.Id),
				 new MySqlParameter("site_id", this.SiteId),
				 new MySqlParameter("parent_id", this.ParentId),
				 new MySqlParameter("file_name", this.FileName),
				 new MySqlParameter("content", this.Content),
				 new MySqlParameter("title", this.Title),
				 new MySqlParameter("keywords", this.Keywords),
				 new MySqlParameter("description", this.Description),
				 new MySqlParameter("h1", this.H1)
			};

			string sql = "UPDATE page_info SET site_id = ?site_id, parent_id = ?parent_id, file_name = ?file_name, content = ?content, title = ?title, keywords = ?keywords, description = ?description, h1 = ?h1 WHERE id = ?id";
            return DBHelper.NoneQuery(sql, paras);

        }

		public static int Delete(int id)
        {
            string sql = string.Format("DELETE FROM page_info WHERE id = {0}", id);
            return DBHelper.NoneQuery(sql);

        }

		public static PageInfo GetById(int id)
        {
            string sql = string.Format("SELECT * FROM page_info WHERE id = {0}", id);
            DataTable table = DBHelper.GetDateTable(sql);
			List<PageInfo> list = new DatatableFill<PageInfo>().FillModel(table);
            //List<PageInfo> list = Mapper.DynamicMap<IDataReader, List<PageInfo>>(table.CreateDataReader());
            if (list == null || list.Count == 0) return null;
            return list[0];
        }

		public static List<PageInfo> GetList()
        {
            string sql = "SELECT * FROM page_info";
            DataTable table = DBHelper.GetDateTable(sql);
			List<PageInfo> list = new DatatableFill<PageInfo>().FillModel(table);
            //List<PageInfo> list = Mapper.DynamicMap<IDataReader, List<PageInfo>>(table.CreateDataReader());
            return list;

        }

		public static List<PageInfo> Find(string where)
        {
            string sql = string.Format("SELECT * FROM page_info WHERE {0};", where);
            DataTable table = DBHelper.GetDateTable(sql);
            return new DatatableFill<PageInfo>().FillModel(table);
        }

        public static List<PageInfo> Find(string field, string prop)
        {
            return Find(string.Format(" {0} = ‘{1}‘ ", field, prop));

        }

        public static bool Exist(string field, string prop)
        {
            int n = Count(field, prop);
            return n > 0 ? true : false;
        }

        public static int Count(string where)
        {
            string sql = string.Format("SELECT COUNT(1) FROM page_info WHERE {0}", where);
            DataTable table = DBHelper.GetDateTable(sql);
            return Convert.ToInt32(table.Rows[0][0]);
        }

        public static int Count(string field, string prop)
        {
            return Count(string.Format(" {0} = ‘{1}‘ ", field, prop));
        }

        public static int Count()
        {
            return Count(" 1 = 1 ");
        }

        public static List<PageInfo> Find(int index, int size, ref int count)
        {
            count = Count(" 1 = 1 ");
            string sql = string.Format(" 1 = 1 Order by id desc  LIMIT {0}, {1} ", index * size , size);
            return Find(sql);
        }

        public static List<PageInfo> Find(string field, string prop, int index, int size, ref int count)
        {
            count = Count(field, prop);
            string sql = string.Format(" {0} = {1} Order by id desc LIMIT {2}, {3} ", field, prop, index, size);
            return Find(sql);
        }
    }

	public partial class SiteInfo
    {
		#region Field
		/// <summary>
        /// 
        /// </summary>
		public int Id { get; set; }
		/// <summary>
        /// 
        /// </summary>
		public string Name { get; set; }
		/// <summary>
        /// 
        /// </summary>
		public string Template { get; set; }
		#endregion

		public int Save()
		{
			MySqlParameter[] paras = new MySqlParameter[] { 
				 new MySqlParameter("name", this.Name),
				 new MySqlParameter("template", this.Template)
			};

			string sql = "INSERT INTO site_info(name, template) VALUES(?name, ?template)";
		return DBHelper.NoneQuery(sql, paras);
		}
		
		public int Update()
        {

            MySqlParameter[] paras = new MySqlParameter[] { 
				 new MySqlParameter("id", this.Id),
				 new MySqlParameter("name", this.Name),
				 new MySqlParameter("template", this.Template)
			};

			string sql = "UPDATE site_info SET name = ?name, template = ?template WHERE id = ?id";
            return DBHelper.NoneQuery(sql, paras);

        }

		public static int Delete(int id)
        {
            string sql = string.Format("DELETE FROM site_info WHERE id = {0}", id);
            return DBHelper.NoneQuery(sql);

        }

		public static SiteInfo GetById(int id)
        {
            string sql = string.Format("SELECT * FROM site_info WHERE id = {0}", id);
            DataTable table = DBHelper.GetDateTable(sql);
			List<SiteInfo> list = new DatatableFill<SiteInfo>().FillModel(table);
            //List<SiteInfo> list = Mapper.DynamicMap<IDataReader, List<SiteInfo>>(table.CreateDataReader());
            if (list == null || list.Count == 0) return null;
            return list[0];
        }

		public static List<SiteInfo> GetList()
        {
            string sql = "SELECT * FROM site_info";
            DataTable table = DBHelper.GetDateTable(sql);
			List<SiteInfo> list = new DatatableFill<SiteInfo>().FillModel(table);
            //List<SiteInfo> list = Mapper.DynamicMap<IDataReader, List<SiteInfo>>(table.CreateDataReader());
            return list;

        }

		public static List<SiteInfo> Find(string where)
        {
            string sql = string.Format("SELECT * FROM site_info WHERE {0};", where);
            DataTable table = DBHelper.GetDateTable(sql);
            return new DatatableFill<SiteInfo>().FillModel(table);
        }

        public static List<SiteInfo> Find(string field, string prop)
        {
            return Find(string.Format(" {0} = ‘{1}‘ ", field, prop));

        }

        public static bool Exist(string field, string prop)
        {
            int n = Count(field, prop);
            return n > 0 ? true : false;
        }

        public static int Count(string where)
        {
            string sql = string.Format("SELECT COUNT(1) FROM site_info WHERE {0}", where);
            DataTable table = DBHelper.GetDateTable(sql);
            return Convert.ToInt32(table.Rows[0][0]);
        }

        public static int Count(string field, string prop)
        {
            return Count(string.Format(" {0} = ‘{1}‘ ", field, prop));
        }

        public static int Count()
        {
            return Count(" 1 = 1 ");
        }

        public static List<SiteInfo> Find(int index, int size, ref int count)
        {
            count = Count(" 1 = 1 ");
            string sql = string.Format(" 1 = 1 Order by id desc  LIMIT {0}, {1} ", index * size , size);
            return Find(sql);
        }

        public static List<SiteInfo> Find(string field, string prop, int index, int size, ref int count)
        {
            count = Count(field, prop);
            string sql = string.Format(" {0} = {1} Order by id desc LIMIT {2}, {3} ", field, prop, index, size);
            return Find(sql);
        }
    }

}