现在的位置: 首页 > 综合 > 正文

Dapper结合Repository模式的应用

2014年10月07日 ⁄ 综合 ⁄ 共 4065字 ⁄ 字号 评论关闭

Dapper结合Repository模式的应用,包括如何在数据访问层(DAL)使用Dapper组件。

Dapper在真实项目中使用,扩展IDbConnection的功能,支持Oracle、MS SQL Server 2005数据库

1)定义统一的IDbConnection访问入口

 

public class Database
    {
        /// 得到web.config里配置项的数据库连接字符串。
        private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
        /// 得到工厂提供器类型
        private static readonly string ProviderFactoryString = ConfigurationManager.AppSettings["DBProvider"].ToString();
        private static DbProviderFactory df = null;
        /// <summary>
        /// 创建工厂提供器并且
        /// </summary>
        public static IDbConnection DbService()
        {
            if (df == null)
                df = DbProviderFactories.GetFactory(ProviderFactoryString);
            var connection = df.CreateConnection();
            connection.ConnectionString = ConnectionString;
            connection.Open();
            return connection;
        }
}

2)app.config配置

<?xml version="1.0"?>
<configuration>
  <configSections>
  </configSections>
  <appSettings>
    <add key="DBProvider" value="System.Data.SqlClient"/>
  </appSettings>
  <connectionStrings>
    <add name="ConnectionString" connectionString="Data Source=.;Initial Catalog=PlanDb;User ID=sa;Password=manager;" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

 

3)Repository模式实现

/// <summary>
    /// 产品管理
    /// </summary>
    public class ProductRepository
    {
        public static Product GetById(int id)
        {
            var sqlstr = "select * from dbo.Product where Product_ID=@id";
            using (var conn = Database.DbService())
            {
                return conn.Query<Product>(sqlstr, new { id }).Single();
            }
        }

        public static List<Product> GetByPid(int pid)
        {
            var sqlstr = "select * from dbo.Product where Parent_ID=@pid order by Product_no";
            using (var conn = Database.DbService())
            {
                return conn.Query<Product>(sqlstr, new { pid }).ToList();
            }
        }

        /// <summary>
        /// 获取所有产品--机型
        /// </summary>
        /// <returns></returns>
        public static List<Product> GetAllTop()
        {
            var sqlstr = "select * from dbo.Product where Parent_ID=0 order by Product_no";
            using (var conn = Database.DbService())
            {
                return conn.Query<Product>(sqlstr).ToList();
            }
        }

        public static void Insert(Product model)
        {
            if (model.Product_ID == 0)
                model.Product_ID = NextId;
            string sqlstr = "INSERT INTO dbo.Product" +
                "(Product_ID, Parent_ID, Product_No, Product_Name, Product_Type, Remark, Creater, Create_Date, Data_Availability) " +
                "values(@Product_ID,@Parent_ID,@Product_No,@Product_Name,@Product_Type,@Remark,@Creater,@Create_Date,@Data_Availability)";
            using (var conn = Database.DbService())
            {               
                conn.Execute(sqlstr, model);
            }
        }

        public static void Delete(int id)
        {
            var sqlstr = "delete from dbo.Product where Product_ID=@id";
            using (var conn = Database.DbService())
            {
                conn.Execute(sqlstr, new { id });
            }
        }
        public static void Update(Product model)
        {
            string sqlstr = "UPDATE dbo.Product " +
                "SET Product_No = @Product_No," +
                "    Product_Name = @Product_Name, " +
                "    Product_Type = @Product_Type, " +
                "    Remark = @Remark" +
                " WHERE Product_ID = @Product_ID";
            using (var conn = Database.DbService())
            {
                conn.Execute(sqlstr,  model);
            }
        }
        /// <summary>
        /// 下一个ID
        /// </summary>
        public static int NextId
        {
            get
            {
                return Database.NextId("Product");
            }
        }
        public static bool Exists(string no)
        {
            var sqlstr = "select count(*) from dbo.Product where Product_No=@no";
            using (var conn = Database.DbService())
            {
                return conn.Query<int>(sqlstr, new { no }).Single() > 0;
            }
        }
    }

http://blog.csdn.net/dacong 转载请注明出处

 

public class Product
    {
        #region Fields
        private int _product_id;
        private int _parent_id;
        private string _product_no = "";
        private string _product_name = "";
        private string _product_type = "";
        private string _remark = "";
        private string _creater = "";
        private DateTime _create_date;
        private string _data_availability = "";
        #endregion

        public Product()
        {
            _parent_id = 0;
            _data_availability = "Y";
        }
        #region Public Properties

        public int Product_ID
        {
            get { return _product_id; }
            set
            {
                _product_id = value;
            }
        }

        /// <summary>
        /// 父产品ID,0为最顶层产品
        /// </summary>
        public int Parent_ID
        {
            get { return _parent_id; }
            set
            {
                _parent_id = value;
            }
        }

        public string Product_No
        {
            get { return _product_no; }
            set
            {
                _product_no = value;
            }
        }

        public string Product_Name
        {
            get { return _product_name; }
            set
            {
                _product_name = value;
            }
        }

        public string Product_Type
        {
            get { return _product_type; }
            set
            {
                _product_type = value;
            }
        }

        public string Remark
        {
            get { return _remark; }
            set
            {
                _remark = value;
            }
        }

        public string Creater
        {
            get { return _creater; }
            set
            {
                _creater = value;
            }
        }

        public DateTime Create_Date
        {
            get { return _create_date; }
            set
            {
                _create_date = value;
            }
        }

        public string Data_Availability
        {
            get { return _data_availability; }
            set
            {
                _data_availability = value;
            }
        }


        #endregion
}

 

抱歉!评论已关闭.