ASP.NET MVC+EF6+Bootstrap开发框架

    ASP.NET MVC+EF6+Bootstrap开发框架_NFine

    • 商品编号:
      #13683822_136
      • 原价:
        免费
      • 会员价:
        免费
    • 版本:
      • V1.0.0
    • 数量:
      库存(不限)

    购物车中已存在此商品,请在购物车中操作单击跳转购物车

    • 数据库:无
    • 编码格式:UTF-8
    • 开发者:黄林
    • 开源协议:不开源
    • 版本工具管理:SVN
    • 开发环境:Visaual Studio
    • 开发语言:C#
    • 源码架构:B/S
    • 博客地址:http://www.oschina.net/p/nfine
    • 演示地址:http://www.nfine.cn:8099/
    • 大小(M):30

    前言

        框架名称:NFine.Framwork,牛逼框架,好框架

        框架使用场景:OA、ERP、BPM、CRM、WMS、TMS、MIS等业务管理系统及后台系统

    框架解决方案:


    解决方案简介:

    1、NFine.Code 底层核心类(开发时不涉及,可编绎成dll提供)。

    2、NFine.Data 数据层(开发时不涉及,可编绎成dll提供)。

    3、NFine.Application  应用(有点类似业务逻辑层) 

    4、NFine.Domain 领域层。

    5、NFine.Mapping 数据库映射。

    6、NFine.Repository 数据访问。

    7、NFine.Web 前端视图及控制器。

    框架主要运用技术:

    • 1、前端技术
    • JS框架:jquery-2.1.1、Bootstrap.js、JQuery UI
    • CSS框架:Bootstrap v3.3.4(稳定是后台,UI方面根据需求自己升级改造吧)。
    • 客户端验证:jQuery Validation Plugin 1.9.0。
    • 在线编辑器:ckeditor、simditor
    • 上传文件:Uploadify v3.2.1
    • 动态页签:Jerichotab(自己改造)
    • 数据表格:jqGrid、Bootstrap Talbe
    • 对话框:layer-v2.3
    • 下拉选择框:jQuery Select2
    • 树结构控件:jQuery zTree、jQuery wdtree
    • 页面布局:jquery.layout.js 1.4.4
    • 图表插件:echarts、highcharts
    • 日期控件: My97DatePicker
    • 2、后端技术
    • 核心框架:ASP.NET MVC5、WEB API
    • 持久层框架:EntityFramework 6.0
    • 定时计划任务:Quartz.Net组件
    • 安全支持:过滤器、Sql注入、请求伪造
    • 服务端验证:实体模型验证、自己封装Validator
    • 缓存框架:微软自带Cache、Redis
    • 日志管理:Log4net、登录日志、操作日志
    • 工具类:NPOI、Newtonsoft.Json、验证码、丰富公共类似

    框架代码风格:

    数据库、仓库代码

    using NFine.Code;
    using System;
    using System.Collections.Generic;
    using System.Data.Common;
    using System.Linq;
    using System.Linq.Expressions;
    
    namespace NFine.Data
    {
        /// <summary>
        /// 仓储接口
        /// </summary>
        /// <typeparam name="TEntity">实体类型</typeparam>
        public interface IRepositoryBase<TEntity> where TEntity : class,new()
        {
            int Insert(TEntity entity);
            int Insert(List<TEntity> entitys);
            int Update(TEntity entity);
            int Delete(TEntity entity);
            int Delete(Expression<Func<TEntity, bool>> predicate);
            TEntity FindEntity(object keyValue);
            TEntity FindEntity(Expression<Func<TEntity, bool>> predicate);
            IQueryable<TEntity> IQueryable();
            IQueryable<TEntity> IQueryable(Expression<Func<TEntity, bool>> predicate);
            List<TEntity> FindList(string strSql);
            List<TEntity> FindList(string strSql, DbParameter[] dbParameter);
            List<TEntity> FindList(Pagination pagination);
            List<TEntity> FindList(Expression<Func<TEntity, bool>> predicate, Pagination pagination);
        }
    }
    using NFine.Code;
    using System;
    using System.Collections.Generic;
    using System.Data.Common;
    using System.Data.Entity;
    using System.Linq;
    using System.Linq.Expressions;
    using System.Reflection;
    using System.Text.RegularExpressions;
    
    namespace NFine.Data
    {
        /// <summary>
        /// 仓储实现
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        public class RepositoryBase<TEntity> : IRepositoryBase<TEntity> where TEntity : class,new()
        {
            public NFineDbContext dbcontext = new NFineDbContext();
            public int Insert(TEntity entity)
            {
                dbcontext.Entry<TEntity>(entity).State = EntityState.Added;
                return dbcontext.SaveChanges();
            }
            public int Insert(List<TEntity> entitys)
            {
                foreach (var entity in entitys)
                {
                    dbcontext.Entry<TEntity>(entity).State = EntityState.Added;
                }
                return dbcontext.SaveChanges();
            }
            public int Update(TEntity entity)
            {
                dbcontext.Set<TEntity>().Attach(entity);
                PropertyInfo[] props = entity.GetType().GetProperties();
                foreach (PropertyInfo prop in props)
                {
                    if (prop.GetValue(entity, null) != null)
                    {
                        if (prop.GetValue(entity, null).ToString() == "&nbsp;")
                            dbcontext.Entry(entity).Property(prop.Name).CurrentValue = null;
                        dbcontext.Entry(entity).Property(prop.Name).IsModified = true;
                    }
                }
                return dbcontext.SaveChanges();
            }
            public int Delete(TEntity entity)
            {
                dbcontext.Set<TEntity>().Attach(entity);
                dbcontext.Entry<TEntity>(entity).State = EntityState.Deleted;
                return dbcontext.SaveChanges();
            }
            public int Delete(Expression<Func<TEntity, bool>> predicate)
            {
                var entitys = dbcontext.Set<TEntity>().Where(predicate).ToList();
                entitys.ForEach(m => dbcontext.Entry<TEntity>(m).State = EntityState.Deleted);
                return dbcontext.SaveChanges();
            }
            public TEntity FindEntity(object keyValue)
            {
                return dbcontext.Set<TEntity>().Find(keyValue);
            }
            public TEntity FindEntity(Expression<Func<TEntity, bool>> predicate)
            {
                return dbcontext.Set<TEntity>().FirstOrDefault(predicate);
            }
            public IQueryable<TEntity> IQueryable()
            {
                return dbcontext.Set<TEntity>();
            }
            public IQueryable<TEntity> IQueryable(Expression<Func<TEntity, bool>> predicate)
            {
                return dbcontext.Set<TEntity>().Where(predicate);
            }
            public List<TEntity> FindList(string strSql)
            {
                return dbcontext.Database.SqlQuery<TEntity>(strSql).ToList<TEntity>();
            }
            public List<TEntity> FindList(string strSql, DbParameter[] dbParameter)
            {
                return dbcontext.Database.SqlQuery<TEntity>(strSql, dbParameter).ToList<TEntity>();
            }
            public List<TEntity> FindList(Pagination pagination)
            {
                bool isAsc = pagination.sord.ToLower() == "asc" ? true : false;
                string[] _order = pagination.sidx.Split(',');
                MethodCallExpression resultExp = null;
                var tempData = dbcontext.Set<TEntity>().AsQueryable();
                foreach (string item in _order)
                {
                    string _orderPart = item;
                    _orderPart = Regex.Replace(_orderPart, @"\s+", " ");
                    string[] _orderArry = _orderPart.Split(' ');
                    string _orderField = _orderArry[0];
                    bool sort = isAsc;
                    if (_orderArry.Length == 2)
                    {
                        isAsc = _orderArry[1].ToUpper() == "ASC" ? true : false;
                    }
                    var parameter = Expression.Parameter(typeof(TEntity), "t");
                    var property = typeof(TEntity).GetProperty(_orderField);
                    var propertyAccess = Expression.MakeMemberAccess(parameter, property);
                    var orderByExp = Expression.Lambda(propertyAccess, parameter);
                    resultExp = Expression.Call(typeof(Queryable), isAsc ? "OrderBy" : "OrderByDescending", new Type[] { typeof(TEntity), property.PropertyType }, tempData.Expression, Expression.Quote(orderByExp));
                }
                tempData = tempData.Provider.CreateQuery<TEntity>(resultExp);
                pagination.records = tempData.Count();
                tempData = tempData.Skip<TEntity>(pagination.rows * (pagination.page - 1)).Take<TEntity>(pagination.rows).AsQueryable();
                return tempData.ToList();
            }
            public List<TEntity> FindList(Expression<Func<TEntity, bool>> predicate, Pagination pagination)
            {
                bool isAsc = pagination.sord.ToLower() == "asc" ? true : false;
                string[] _order = pagination.sidx.Split(',');
                MethodCallExpression resultExp = null;
                var tempData = dbcontext.Set<TEntity>().Where(predicate);
                foreach (string item in _order)
                {
                    string _orderPart = item;
                    _orderPart = Regex.Replace(_orderPart, @"\s+", " ");
                    string[] _orderArry = _orderPart.Split(' ');
                    string _orderField = _orderArry[0];
                    bool sort = isAsc;
                    if (_orderArry.Length == 2)
                    {
                        isAsc = _orderArry[1].ToUpper() == "ASC" ? true : false;
                    }
                    var parameter = Expression.Parameter(typeof(TEntity), "t");
                    var property = typeof(TEntity).GetProperty(_orderField);
                    var propertyAccess = Expression.MakeMemberAccess(parameter, property);
                    var orderByExp = Expression.Lambda(propertyAccess, parameter);
                    resultExp = Expression.Call(typeof(Queryable), isAsc ? "OrderBy" : "OrderByDescending", new Type[] { typeof(TEntity), property.PropertyType }, tempData.Expression, Expression.Quote(orderByExp));
                }
                tempData = tempData.Provider.CreateQuery<TEntity>(resultExp);
                pagination.records = tempData.Count();
                tempData = tempData.Skip<TEntity>(pagination.rows * (pagination.page - 1)).Take<TEntity>(pagination.rows).AsQueryable();
                return tempData.ToList();
            }
        }
    }


        版权所有:黄林  http://www.cnblogs.com/huanglin/archive/2016/08/22/5783900.html

    权利声明:本站所有商品信息、客户评价等信息是初心商城重要的数据资源,未经许可,禁止非法转载使用。 注:本站商品信息均来自初心商城,其真实性、准确性和合法性由初心商城负责。

                    初心源说明:初心商城主要为程序员提供开发基础的代码源以及成熟项目,网站中所有的商品有提供收费版本的, 也有提供免费版本的,按照大家各自不同的需求进行购买。实实在在的让程序员只用专注于自己的业务实现你的小梦想, 如果您对我们的成果表示认同并且觉得对你有所帮助我们愿意接受来自各方面的支持^_^。

                    支持:用手机扫描二维码支付

                    支付宝支持我们 微信支持我们

                    您的支持将被用于:
                    1、持续深入的上传更多更好的源代码
                    2、建立更加完善的技术社区
                    3、完善现在系统出现各种问题
                    4、购买域名和租赁服务器

                    1、交易规则

                    2、发货方式

                    1、自动:在上方保障服务中标有自动发货的商品,拍下后,将会自动收到来自卖家的商品获取(下载)链接

                    2、手动:在上方保障服务中标有手动发货的商品,拍下后,卖家会收到邮件,也可通过QQ或订单中的电话联系对方。

                    3、退款说明

                    1、描述:源码描述(含标题)与实际源码不一致的(例:描述PHP实际为ASP、描述的功能实际缺少、版本不符等)

                    2、演示:有演示站时,与实际源码小于95%一致的(但描述中有"不保证完全一样、有变化的可能性"类似显著声明的除外)

                    3、发货:手动发货源码,在卖家未发货前,已申请退款的

                    4、服务:卖家不提供安装服务或需额外收费的(但描述中有显著声明的除外)

                    5、其它:如质量方面的硬性常规问题等

                    备注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。交易中的商品,卖家无法对描述进行修改!

                    4、注意事项

                    1、客户买完之后未确认收货,将不会收到下载地址和下载码,确认收货之后才能收到下载地址和下载码。

                    2、在未拍下前,双方在QQ上所商定的内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准);

                    3、在商品同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外);

                    4、在没有"无任何正当退款依据"的前提下,写有"一旦售出,概不支持退款"等类似的声明,视为无效声明;

                    5、虽然交易产生纠纷的几率很小,但请尽量保留如聊天记录这样的重要信息,以防产生纠纷时出现问题不明确的情况。

                    5、交易声明

                    1、本站作为直卖平台,依据交易合同(商品描述、交易前商定的内容)来保障交易的安全及买卖双方的权益;

                    2、非平台线上交易的商品,出现任何后果均与本站无关;无论卖家以何理由要求线下交易的,请联系管理举报。

                    初心Logo

                    初心商城| 初心系列| 初心博客| 版本历史| 通知公告| 系统反馈

                    © 2016-2019 山西米立信息技术有限公司 保留所有权利 京ICP备16055626号
                    违法和不良信息举报电话:186-2950-9347,本网站所列数据,除特殊说明,所有数据均出自我工作室
                    本网站兼容所有主流浏览器,不支持手机自适应

                    返回顶部小火箭