码迷,mamicode.com
首页 > Windows程序 > 详细

后端API

时间:2016-04-21 15:12:34      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:

后端API

1.数据访问工厂类定义

    /// <summary>
    /// 仓库工厂类
    /// </summary>
    /// <typeparam name="TContext">DbContext类型</typeparam>
    /// <typeparam name="TEntity">实体类型</typeparam>
    public class RepositoryFactory<TContext, TEntity> where TContext : DbContext, new() where TEntity : class
    {
        public static EdmRepository<TContext, TEntity> CreateRepository()
        {
            return new EdmRepository<TContext, TEntity>();
        }

        public static EdmRepository<TContext, TEntity> CreateRepository(String connectionName)
        {
            return new EdmRepository<TContext, TEntity>(connectionName);
        }
    }

    /// <summary>
    /// 仓库工厂类
    /// </summary>
    /// <typeparam name="TContext">DbContext类型</typeparam>
    public class RepositoryFactory<TContext> where TContext : DbContext, new()
    {
        public static EdmRepository<TContext> CreateRepository()
        {
            return new EdmRepository<TContext>();
        }

        public static EdmRepository<TContext> CreateRepository(String connectionName)
        {
            return new EdmRepository<TContext>(connectionName);
        }
    }
仓库接口定义
    /// <summary>
    /// 仓库接口
    /// </summary>
    public interface IRepository : IDisposable
    { 
        /// <summary>
        /// 根据SQL语句返回实体列表
        /// </summary>
        /// <typeparam name="T">实体类型</typeparam>
        /// <param name="sql">SQL语句</param>
        /// <param name="parameters">参数列表</param>
        /// <returns>实体列表</returns>
        IEnumerable<T> SqlQuery<T>(string sql, params object[] parameters);
        /// <summary>
        /// 根据SQL语句查询结果
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <returns></returns>
        object ExecuteScalar(string sql);
        /// <summary>
        /// 执行SQL语句
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="parameters">参数列表</param>
        /// <returns></returns>
        int ExecuteSqlCommand(string sql, params object[] parameters);
    }

    /// <summary>
    /// 仓库接口
    /// </summary>
    /// <typeparam name="TEntity">实体类型</typeparam>
    public interface IRepository<TEntity> : IRepository where TEntity : class
    {
        /// <summary>
        /// 新增方法
        /// </summary>
        /// <param name="entity">实体对象</param>
        /// <returns></returns>
        int Add(TEntity entity);
        /// <summary>
        /// 更新方法
        /// </summary>
        /// <param name="entity">实体对象</param>
        /// <returns></returns>
        int Update(TEntity entity);
        /// <summary>
        /// 删除方法
        /// </summary>
        /// <param name="entity">实体对象</param>
        /// <returns></returns>
        int Delete(TEntity entity);
        /// <summary>
        /// 根据ID获取实体
        /// </summary>
        /// <typeparam name="TID">ID类型</typeparam>
        /// <param name="id">ID</param>
        /// <returns>实体对象</returns>
        TEntity Get<TID>(TID id);
        /// <summary>
        /// 获取整个表数据
        /// </summary>
        /// <returns></returns>
        IQueryable<TEntity> GetAll();
        /// <summary>
        /// 根据查询条件返回实体列表
        /// </summary>
        /// <param name="conditions"></param>
        /// <returns></returns>
        IQueryable<TEntity> Search(List<Condition> conditions);
        /// <summary>
        /// 根据SQL语句返回实体列表
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="parameters">参数列表</param>
        /// <returns></returns>
        DbSqlQuery<TEntity> SqlQuery(string sql, params object[] parameters);
    }
声明仓库
using (IRepository<mng_department> repository = RepositoryFactory<PSADataEntities, mng_department>.CreateRepository())
{
                
}
新增方法实例
using (IRepository<mng_department> repository = RepositoryFactory<PSADataEntities, mng_department>.CreateRepository())
{
    mng_department dept = new mng_department();
    repository.Add(dept);
}
更新方法实例
using (IRepository<mng_department> repository = RepositoryFactory<PSADataEntities, mng_department>.CreateRepository())
{
    int id = 1;
    mng_department dept = repository.Get(id);
    dept.Dep_DeptName = "Test";
    repository.Update(dept);
}
删除方法实例
using (IRepository<mng_department> repository = RepositoryFactory<PSADataEntities, mng_department>.CreateRepository())
{
    int id = 1;
    mng_department dept = repository.Get(id);
    repository.Delete(dept);
}
根据ID查询
using (IRepository<mng_department> repository = RepositoryFactory<PSADataEntities, mng_department>.CreateRepository())
{
    int id = 1;
    mng_department dept = repository.Get(id);
}
根据具体条件查询
using (IRepository<mng_department> repository = RepositoryFactory<PSADataEntities, mng_department>.CreateRepository())
{
    string deptName = "Test";
    var list = repository.GetAll().Where(p => p.Dep_DeptName.Contains(deptName));
}
根据SQL语句查询(不推荐使用)
using (IRepository repository = RepositoryFactory<PSADataEntities>.CreateRepository())
{
    var list = repository.SqlQuery<mng_department>("SELECT * FROM dbo.mng_department WHERE Dep_Id=1").ToList();
}
查询条件封装
/// <summary>
    /// 查询条件帮助类
    /// </summary>
    /// <typeparam name="TModel">实体类型</typeparam>
    public class ConditionHelper<TModel> : ConditionHelper
    {
        
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="model">实体对象</param>
        public ConditionHelper(TModel model);

        #region Generic AddCondition Helper
        /// <summary>
        /// 添加查询条件
        /// </summary>
        /// <typeparam name="TProperty">字段类型</typeparam>
        /// <param name="field">字段表达式</param>
        /// <param name="op">操作符</param>
        public void AddConditionFor<TProperty>(Expression<Func<TModel, TProperty>> field, Operator op);
        /// <summary>
        /// 添加查询条件
        /// </summary>
        /// <typeparam name="TProperty">字段类型</typeparam>
        /// <param name="field">字段表达式</param>
        /// <param name="valueField">值表达式</param>
        /// <param name="op">操作符</param>
        public void AddConditionFor<TProperty>(Expression<Func<TModel, TProperty>> field, Expression<Func<TModel, TProperty>> valueField, Operator op);
        /// <summary>
        /// 添加查询条件
        /// </summary>
        /// <typeparam name="TProperty">字段类型</typeparam>
        /// <param name="field">字段表达式</param>
        /// <param name="value">值</param>
        /// <param name="op">操作符</param>
        public void AddConditionFor<TProperty>(Expression<Func<TModel, TProperty>> field, TProperty value, Operator op);
        /// <summary>
        /// 添加查询条件
        /// </summary>
        /// <typeparam name="TProperty">字段类型</typeparam>
        /// <param name="field">字段表达式</param>
        /// <param name="op">操作符</param>
        /// <param name="relation">条件关系and or</param>
        public void AddConditionFor<TProperty>(Expression<Func<TModel, TProperty>> field, Operator op, Relation relation);
        /// <summary>
        /// 添加查询条件
        /// </summary>
        /// <typeparam name="TProperty">字段类型</typeparam>
        /// <param name="field">字段表达式</param>
        /// <param name="op">操作符</param>
        /// <param name="relation">条件关系and or</param>
        /// <param name="perfix">层次</param>
        public void AddConditionFor<TProperty>(Expression<Func<TModel, TProperty>> field, Operator op, Relation relation, int perfix);
        /// <summary>
        /// 添加查询条件
        /// </summary>
        /// <typeparam name="TProperty">字段类型</typeparam>
        /// <param name="field">字段表达式</param>
        /// <param name="valueField">值表达式</param>
        /// <param name="op">操作符</param>
        /// <param name="relation">条件关系and or</param>
        public void AddConditionFor<TProperty>(Expression<Func<TModel, TProperty>> field, Expression<Func<TModel, TProperty>> valueField, Operator op, Relation relation);
        /// <summary>
        /// 添加查询条件
        /// </summary>
        /// <typeparam name="TProperty">字段类型</typeparam>
        /// <param name="field">字段表达式</param>
        /// <param name="value">值</param>
        /// <param name="op">操作符</param>
        /// <param name="relation">条件关系and or</param>
        public void AddConditionFor<TProperty>(Expression<Func<TModel, TProperty>> field, TProperty value, Operator op, Relation relation);
        /// <summary>
        /// 添加查询条件
        /// </summary>
        /// <typeparam name="TProperty">字段类型</typeparam>
        /// <param name="field">字段表达式</param>
        /// <param name="valueField">值表达式</param>
        /// <param name="op">操作符</param>
        /// <param name="relation">条件关系and or</param>
        /// <param name="prefix">层次</param>
        public void AddConditionFor<TProperty>(Expression<Func<TModel, TProperty>> field, Expression<Func<TModel, TProperty>> valueField, Operator op, Relation relation, int prefix);
        /// <summary>
        /// 添加查询条件
        /// </summary>
        /// <typeparam name="TProperty">字段类型</typeparam>
        /// <param name="field">字段表达式</param>
        /// <param name="value">值</param>
        /// <param name="op">操作符</param>
        /// <param name="relation">条件关系and or</param>
        /// <param name="prefix">层次</param>
        public void AddConditionFor<TProperty>(Expression<Func<TModel, TProperty>> field, TProperty value, Operator op, Relation relation, int prefix);
        /// <summary>
        /// 添加查询条件
        /// </summary>
        /// <typeparam name="TProperty">字段类型</typeparam>
        /// <param name="field">字段表达式</param>
        /// <param name="listValue">值列表</param>
        /// <param name="op"></param>
        /// <param name="relation"></param>
        /// <param name="prefix"></param>
        public void AddConditionFor<TProperty>(Expression<Func<TModel, TProperty>> field, List<TProperty> listValue, Operator op = Operator.IN, Relation relation = Relation.And, int prefix = 0);
        #endregion

        /// <summary>
        /// 添加排序条件
        /// </summary>
        /// <typeparam name="TProperty">字段类型</typeparam>
        /// <param name="field">字段表达式</param>
        /// <param name="sort">排序类型asc desc</param>
        public void AddSortFieldFor<TProperty>(Expression<Func<TModel, TProperty>> field, Sort sort = Sort.ASC);
    }

使用查询条件实例
using (IRepository<mng_department> repository = RepositoryFactory<PSADataEntities, mng_department>.CreateRepository())
            {
                mng_department model = new mng_department();
                ConditionHelper<mng_department> helper = new ConditionHelper<mng_department>(model);
                helper.AddConditionFor(m => m.Dep_DeptName, "Test", Operator.Equal);

                helper.AddSortFieldFor(m => m.Dep_Id, Sort.ASC);
                var sc = helper.GetSearchCondition();
                var list = repository.GetAll().WhereUsingConditions(sc.Conditions)
                    .OrderUsingSortExpression(sc.SortExpression).ToList();
            }
对象映射
/// <summary>
    /// 对象映射帮助类
    /// </summary>
    public static class ObjectMapHelper
    {
        /// <summary>
        /// 映射方法
        /// </summary>
        /// <typeparam name="FromEntity">源对象类型</typeparam>
        /// <typeparam name="ToEntity">目标对象类型</typeparam>
        /// <param name="from">源对象</param>
        /// <returns>目标对象</returns>
        public static ToEntity Map<FromEntity, ToEntity>(FromEntity from)
        {
            return ObjectMapperManager.DefaultInstance.GetMapper<FromEntity, ToEntity>().Map(from);
        }
        /// <summary>
        /// 映射方法
        /// </summary>
        /// <typeparam name="FromEntity">源对象类型</typeparam>
        /// <typeparam name="ToEntity">目标对象类型</typeparam>
        /// <param name="from">源对象</param>
        /// <param name="to">目标对象</param>
        /// <returns>目标对象</returns>
        public static ToEntity Map<FromEntity, ToEntity>(FromEntity from, ToEntity to)
        {
            return ObjectMapperManager.DefaultInstance.GetMapper<FromEntity, ToEntity>().Map(from, to);
        }
        /// <summary>
        /// 映射方法
        /// </summary>
        /// <param name="from">源对象类型</param>
        /// <param name="to">目标对象类型</param>
        /// <param name="fromObj">源对象</param>
        /// <returns>目标对象</returns>
        public static Object Map(Type from, Type to, Object fromObj)
        {
            return ObjectMapperManager.DefaultInstance.GetMapperImpl(from, to, null).Map(fromObj);
        }
    }
对象映射实例
using (IRepository<mng_Dictionary> repository = RepositoryFactory<PSADataEntities, mng_Dictionary>.CreateRepository())
            {
                int id = 1;
                mng_Dictionary dic = repository.Get(id);
                DictionaryModel model = ObjectMapHelper.Map<mng_Dictionary, DictionaryModel>(dic);
            }
PageList实例
using (IRepository<mng_department> repository = RepositoryFactory<PSADataEntities, mng_department>.CreateRepository())
            {
                mng_department model = new mng_department();
                ConditionHelper<mng_department> helper = new ConditionHelper<mng_department>(model);
                helper.AddConditionFor(m => m.Dep_DeptName, "Test", Operator.Like);

                helper.AddSortFieldFor(m => m.Dep_Id, Sort.ASC);
                var sc = helper.GetSearchCondition();

                int pageIndex = 1;
                int pageSize = 10;

                var list = repository.GetAll().WhereUsingConditions(sc.Conditions);
                int count = list.Count();

                PagedList<mng_department> pageList = list.OrderUsingSortExpression(sc.SortExpression)
                    .Skip((pageIndex - 1) * pageSize).Take(pageSize).ToPagedList(pageIndex, pageSize, count);
            }
2.邮件发送
/// <summary>
    /// 邮件发送帮助类
    /// </summary>
    public static class MailHelper
    { 
        #region 发送Html邮件
        /// <summary>
        /// 发送Html格式邮件
        /// </summary>
        /// <param name="mailTo">收件人列表</param>
        /// <param name="mailSubject">邮件主题</param>
        /// <param name="mailBody">邮件正文</param>
        /// <param name="mailImagePaths">邮件内嵌图片物理路径</param>
        /// <returns></returns>
        public static bool SendHtmlMail(List<MailAddress> mailTo, String mailSubject, String mailBody);

        /// <summary>
        /// 发送Html格式邮件
        /// </summary>
        /// <param name="mailTo">收件人列表</param>
        /// <param name="mailSubject">邮件主题</param>
        /// <param name="mailBody">邮件正文</param>
        /// <param name="mailImagePaths">邮件内嵌图片物理路径</param>
        /// <returns></returns>
        public static bool SendHtmlMail(List<MailAddress> mailTo, String mailSubject, String mailBody, List<String> mailImagePaths, List<String> mailAttachemtnPaths);

        /// <summary>
        /// 发送Html格式邮件
        /// </summary>
        /// <param name="mailTo">收件人列表</param>
        /// <param name="mailCC">抄送人列表</param>
        /// <param name="mailSubject">邮件主题</param>
        /// <param name="mailBody">邮件正文</param>
        /// <param name="mailImagePaths">邮件内嵌图片物理路径</param>
        /// <returns></returns>
        public static bool SendHtmlMail(List<MailAddress> mailTo, List<MailAddress> mailCC, String mailSubject, String mailBody, List<String> mailImagePaths, List<String> mailAttachemtnPaths);

        /// <summary>
        /// 发送Html格式邮件
        /// </summary>
        /// <param name="mailTo">收件人列表</param>
        /// <param name="mailCC">抄送人列表</param>
        /// <param name="mailBcc">暗送人列表</param>
        /// <param name="mailSubject">邮件主题</param>
        /// <param name="mailBody">邮件正文</param>
        /// <param name="mailImagePaths">邮件内嵌图片物理路径</param>
        /// <param name="mailAttachemtnPaths">邮件附件文件路径</param>
        /// <returns></returns>
        public static bool SendHtmlMail(List<MailAddress> mailTo, List<MailAddress> mailCC, List<MailAddress> mailBcc, String mailSubject, String mailBody, List<String> mailImagePaths, List<String> mailAttachemtnPaths);

        #endregion

        #region 发送Text邮件
        /// <summary>
        /// 发送Text格式邮件
        /// </summary>
        /// <param name="mailTo">收件人列表</param>
        /// <param name="mailSubject">邮件主题</param>
        /// <param name="mailBody">邮件正文</param>
        /// <returns></returns>
        public static bool SendTextMail(List<MailAddress> mailTo, String mailSubject, String mailBody);

        /// <summary>
        /// 发送Text格式邮件
        /// </summary>
        /// <param name="mailTo">收件人列表</param>
        /// <param name="mailSubject">邮件主题</param>
        /// <param name="mailBody">邮件正文</param>
        /// <param name="mailAttachemtnPaths">邮件附件文件路径</param>
        /// <returns></returns>
        public static bool SendTextMail(List<MailAddress> mailTo, String mailSubject, String mailBody, List<String> mailAttachemtnPaths);

        /// <summary>
        /// 发送Text格式邮件
        /// </summary>
        /// <param name="mailTo">收件人列表</param>
        /// <param name="mailCC">抄送人列表</param>
        /// <param name="mailSubject">邮件主题</param>
        /// <param name="mailBody">邮件正文</param>
        /// <param name="mailAttachemtnPaths">邮件附件文件路径</param>
        /// <returns></returns>
        public static bool SendTextMail(List<MailAddress> mailTo, List<MailAddress> mailCC, String mailSubject, String mailBody, List<String> mailAttachemtnPaths);

        /// <summary>
        /// 发送Text格式邮件
        /// </summary>
        /// <param name="mailTo">收件人列表</param>
        /// <param name="mailCC">抄送人列表</param>
        /// <param name="mailBcc">暗送人列表</param>
        /// <param name="mailSubject">邮件主题</param>
        /// <param name="mailBody">邮件正文</param>
        /// <param name="mailAttachemtnPaths">邮件附件文件路径</param>
        /// <returns></returns>
        public static bool SendTextMail(List<MailAddress> mailTo, List<MailAddress> mailCC, List<MailAddress> mailBcc, String mailSubject, String mailBody, List<String> mailAttachemtnPaths);
        #endregion
    }
邮件发送实例
System.Net.Mail.MailAddress address = new System.Net.Mail.MailAddress("qinghub@isoftstone.com");
            iPSA.Extensions.Helper.MailHelper.SendHtmlMail(new List<System.Net.Mail.MailAddress>() { address }, "邮件标题", "邮件正文"); 
3.Excel操作
/// <summary>
    /// Excel操作帮助类
    /// </summary>
    public class ExcelHelper
    {
        /// <summary>
        /// 导出Excel
        /// </summary>
        /// <param name="filepath">导出文件路径</param>
        /// <param name="dt">导出DataTable</param>
        public static void WriteExcel(String filepath, DataTable dt);
        /// <summary>
        /// 导出Excel
        /// </summary>
        /// <param name="stream">导出文件流</param>
        /// <param name="dt">导出DataTable</param>
        public static void WriteExcel(Stream stream, DataTable dt);
        /// <summary>
        /// 导出Excel
        /// </summary>
        /// <param name="filepath">导出文件路径</param>
        /// <param name="ds">导出DataSet</param>
        public static void WriteExcel(String filepath, DataSet ds);
        /// <summary>
        /// 导出Excel
        /// </summary>
        /// <param name="stream">导出文件流</param>
        /// <param name="ds">导出DataSet</param>
        public static void WriteExcel(Stream stream, DataSet ds);
        /// <summary>
        /// 导入Excel
        /// </summary>
        /// <param name="filepath">导入文件路径</param>
        /// <param name="sheetName">sheet名称</param>
        /// <returns></returns>
        public static DataTable ReadExcel(String filepath, String sheetName);
        /// <summary>
        /// 导入Excel
        /// </summary>
        /// <param name="stream">导入文件流</param>
        /// <param name="sheetName">sheet名称</param>
        /// <returns></returns>
        public static DataTable ReadExcel(Stream stream, String sheetName);
    }
导出Excel实例
DataTable dt = new DataTable();
            dt.Columns.Add("序号");
            dt.Columns.Add("员工编号");
            dt.Columns.Add("员工名称");

            DataRow dr = dt.NewRow();
            dr["序号"] = "1";
            dr["员工编号"] = "11852";
            dr["员工名称"] = "胡青";
            dt.Rows.Add(dr);

            using (MemoryStream ms = new MemoryStream())
            {
                ExcelHelper.WriteExcel(ms, dt);
            }
导入Excel实例
DataTable dt = ExcelHelper.ReadExcel("C:\\TextExcel.xlsx", "sheet1");

后端API

标签:

原文地址:http://www.cnblogs.com/qinghub/p/5416886.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!