示例#1
0
        /// <summary>
        /// 获取字段求和DbCommand 返回Total列
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="filter"></param>
        /// <param name="subTableArg">表名称参数.如果TableAttr设置Name.则根据Name格式化</param>
        /// <returns></returns>
        internal DbCommand GetMaxDbCommand <T>(QueryFilter filter = null, string subTableArg = null)
        {
            DbCommand  dbCommand    = CreateDbCommand();
            string     sqlStr       = "Select Max({1}) as Total From {0}";
            string     selectParams = null;
            DtoMapping dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();
            PiMap      piMap        = DtoMappingHelper.GetPiMapList <T>(filter).FirstOrDefault();

            if (piMap == null)
            {
                throw new Exception("计算字段不能为空");
            }
            selectParams = piMap.FieldName;
            if (filter != null && filter.ItemList.Count > 0)
            {
                sqlStr += filter.FilterSQLString;
            }
            if (filter != null && filter.FilterParameters.Count > 0)
            {
                for (int i = 0; i < filter.FilterParameters.Count; i++)
                {
                    DbParameter dbParameter = dbCommand.CreateParameter();
                    dbParameter.Direction     = ParameterDirection.Input;
                    dbParameter.ParameterName = filter.FilterParameters[i].ParameterName;
                    dbParameter.Value         = filter.FilterParameters[i].ParameterValue;
                    dbParameter.DbType        = filter.FilterParameters[i].ParameterDbType;
                    dbCommand.Parameters.Add(dbParameter);
                }
            }
            dbCommand.CommandText = string.Format(sqlStr, dtoDbMapping.GetTableName(subTableArg), selectParams);
            return(dbCommand);
        }
示例#2
0
        /// <summary>
        /// 获取查询DbCommand
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="filter"></param>
        /// <param name="subTableArg">表名称参数.如果TableAttr设置Name.则根据Name格式化</param>
        /// <returns></returns>
        internal DbCommand GetQueryDbCommand <T>(QueryFilter filter = null, string subTableArg = null)
        {
            DbCommand    dbCommand    = CreateDbCommand();
            string       sqlStr       = "Select {1} From {0}";
            string       selectParams = null;
            DtoMapping   dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();
            List <PiMap> piMapList    = DtoMappingHelper.GetPiMapList <T>(filter);

            foreach (PiMap piMap in piMapList)
            {
                selectParams += string.IsNullOrEmpty(selectParams) ? piMap.FieldName : "," + piMap.FieldName;
            }
            if (filter != null && filter.ItemList.Count > 0)
            {
                sqlStr += filter.FilterSQLString;
            }
            if (filter != null && !string.IsNullOrEmpty(filter.OrderSQLString))
            {
                sqlStr += filter.OrderSQLString;
            }
            if (filter != null)
            {
                for (int i = 0; i < filter.FilterParameters.Count; i++)
                {
                    DbParameter dbParameter = dbCommand.CreateParameter();
                    dbParameter.Direction     = ParameterDirection.Input;
                    dbParameter.ParameterName = filter.FilterParameters[i].ParameterName;
                    dbParameter.Value         = filter.FilterParameters[i].ParameterValue;
                    dbParameter.DbType        = filter.FilterParameters[i].ParameterDbType;
                    dbCommand.Parameters.Add(dbParameter);
                }
            }
            dbCommand.CommandText = string.Format(sqlStr, dtoDbMapping.GetTableName(subTableArg), selectParams);
            return(dbCommand);
        }
示例#3
0
        /// <summary>
        /// 获取查询DbCommand
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="id"></param>
        /// <param name="piMapList">查询属性MapList</param>
        /// <param name="subTableArg">表名称参数.如果TableAttr设置Name.则根据Name格式化</param>
        /// <returns></returns>
        internal DbCommand GetQueryByIdDbCommand <T>(object id, List <PiMap> piMapList, string subTableArg = null)
        {
            DbCommand  dbCommand    = CreateDbCommand();
            DtoMapping dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();
            string     sqlStr       = "Select {1} From {0} where {2}";
            string     selectParams = null;
            string     whereParams  = null;

            foreach (PiMap piMap in piMapList)
            {
                selectParams += string.IsNullOrEmpty(selectParams) ? piMap.FieldName : "," + piMap.FieldName;
            }
            DbParameter dbParameter = dbCommand.CreateParameter();

            dbParameter.Direction     = ParameterDirection.Input;
            dbParameter.ParameterName = "@" + dtoDbMapping.PkMap.FieldName;
            dbParameter.Value         = id;
            dbParameter.DbType        = dtoDbMapping.PkMap.DbType;
            dbCommand.Parameters.Add(dbParameter);

            whereParams = dtoDbMapping.PkMap.FieldName + "=@" + dtoDbMapping.PkMap.FieldName;

            dbCommand.CommandText = string.Format(sqlStr, dtoDbMapping.GetTableName(subTableArg), selectParams, whereParams);
            return(dbCommand);
        }
示例#4
0
        public void Configuration(IAppBuilder app)
        {
            HttpConfiguration httpConfig = new HttpConfiguration();

            UnityConfig.Register(httpConfig);

            ConfigureAuth(app);

            //enable CORS policy
            app.Map("/signalr", map =>
            {
                // Setup the CORS middleware to run before SignalR.
                // By default this will allow all origins.
                map.UseCors(CorsOptions.AllowAll);
                map.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
                {
                    Provider = new QueryStringOAuthBearerProvider()
                });
                var hubConfiguration = new HubConfiguration
                {
                    Resolver = GlobalHost.DependencyResolver
                };
                map.RunSignalR(hubConfiguration);
            });

            WebApiConfig.Register(httpConfig);

            app.UseWebApi(httpConfig);

            //config logging system
            LoggingConfig.LogToDb();

            //config automapper for the solution
            DtoMapping.Map();
        }
示例#5
0
        /// <summary>
        /// 更新数据对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dto">实体对象</param>
        /// <param name="select">更新属性</param>
        public int Update <T>(T dto, Expression <Func <T, object> > select = null) where T : class, new()
        {
            ExHelper.ThrowIfNull(dto, "操作对象不能为空.");
            int rowCount = 0;

            DtoMapping   dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();
            List <PiMap> piMapList    = DtoMappingHelper.GetPiMapList <T>(select);

            using (DbCommand dbCommand = dbProvider.GetUpdateDbCmd(dto, piMapList, this.GetSubTableArg <T>()))
            {
                try
                {
                    dbCommand.Connection = GetDbConnection();
                    rowCount             = dbCommand.ExecuteNonQuery();
                    if (rowCount <= 0)
                    {
                        //throw new Exception("没有更新任何记录.");
                    }
                    CloseDbConnection(dbCommand);
                }
                catch (Exception ex)
                {
                    CloseDbConnection(dbCommand);
                    throw ex;
                }
            }
            return(rowCount);
        }
示例#6
0
        /// <summary>
        /// 获取导入DbCmd 导入时,自带Id
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dto"></param>
        /// <param name="piMapList">查询属性MapList</param>
        /// <param name="subTableArg">表名称参数.如果TableAttr设置Name.则根据Name格式化</param>
        /// <returns></returns>
        internal DbCommand GetImportDbCmd <T>(T dto, List <PiMap> piMapList, string subTableArg = null) where T : class, new()
        {
            DbCommand  dbCommand    = CreateDbCommand();
            DtoMapping dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();

            #region 设置DbCommand
            string sqlStr      = "Insert into {0} ({1}) values({2})";
            string fieldParams = null;
            string valueParams = null;
            foreach (PiMap piMap in piMapList)
            {
                PropertyInfo pi = piMap.Pi;
                if (piMap.FieldAttr.ReadOnly)
                {
                    continue;                            //跳过只读字段
                }
                fieldParams = string.IsNullOrEmpty(fieldParams) ? piMap.FieldName : fieldParams + "," + piMap.FieldName;
                valueParams = string.IsNullOrEmpty(valueParams) ? "@" + piMap.FieldName : valueParams + ",@" + piMap.FieldName;

                DbParameter dbParameter = dbCommand.CreateParameter();
                dbParameter.Direction     = ParameterDirection.Input;
                dbParameter.ParameterName = "@" + piMap.FieldName;
                dbParameter.Value         = GetParameterValue(piMap, dto);
                dbParameter.DbType        = piMap.DbType;
                dbCommand.Parameters.Add(dbParameter);
            }
            dbCommand.CommandText = string.Format(sqlStr, dtoDbMapping.GetTableName(subTableArg), fieldParams, valueParams);
            #endregion
            return(dbCommand);
        }
示例#7
0
        /// <summary>
        /// 获取删除DbCmd
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="filter">过滤条件</param>
        /// <param name="subTableArg">表名称参数.如果TableAttr设置Name.则根据Name格式化</param>
        /// <returns></returns>
        internal DbCommand GetDeleteDbCmd <T>(QueryFilter filter, string subTableArg = null)
        {
            DbCommand dbCommand = CreateDbCommand();

            #region 设置DbCommand

            string sqlStr = "Delete From {0} ";

            DtoMapping dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();

            if (filter == null || filter.FilterParameters.Count <= 0)
            {
                throw new Exception("条件删除时,删除条件不能为空.");
            }
            sqlStr += filter.FilterSQLString;

            for (int i = 0; i < filter.FilterParameters.Count; i++)
            {
                DbParameter dbParameter = dbCommand.CreateParameter();
                dbParameter.Direction     = ParameterDirection.Input;
                dbParameter.ParameterName = filter.FilterParameters[i].ParameterName;
                dbParameter.Value         = filter.FilterParameters[i].ParameterValue;
                dbParameter.DbType        = filter.FilterParameters[i].ParameterDbType;
                dbCommand.Parameters.Add(dbParameter);
            }
            dbCommand.CommandText = string.Format(sqlStr, dtoDbMapping.GetTableName(subTableArg));
            #endregion

            return(dbCommand);
        }
示例#8
0
        /// <summary>
        /// 获取查询RecCountDbCommand
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="filter"></param>
        /// <param name="subTableArg">表名称参数.如果TableAttr设置Name.则根据Name格式化</param>
        /// <returns></returns>
        internal DbCommand GetCountDbCommand <T>(QueryFilter filter, string subTableArg = null)
        {
            DbCommand  dbCommand    = CreateDbCommand();
            string     sqlStr       = "Select Count(*) as RecCount From {0} {1}";
            string     queryStr     = "";
            DtoMapping dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();

            if (filter != null && filter.ItemList.Count > 0)
            {
                queryStr = filter.FilterSQLString;
            }
            if (filter != null && filter.FilterParameters.Count > 0)
            {
                for (int i = 0; i < filter.FilterParameters.Count; i++)
                {
                    DbParameter dbParameter = dbCommand.CreateParameter();
                    dbParameter.Direction     = ParameterDirection.Input;
                    dbParameter.ParameterName = filter.FilterParameters[i].ParameterName;
                    dbParameter.Value         = filter.FilterParameters[i].ParameterValue;
                    dbParameter.DbType        = filter.FilterParameters[i].ParameterDbType;
                    dbCommand.Parameters.Add(dbParameter);
                }
            }
            dbCommand.CommandText = string.Format(sqlStr, dtoDbMapping.GetTableName(subTableArg), queryStr);
            return(dbCommand);
        }
示例#9
0
        /// <summary>
        /// 检查表是否已存在
        /// </summary>
        /// <typeparam name="T">T对象</typeparam>
        /// <returns></returns>
        public bool CheckTableExists <T>() where T : class, new()
        {
            bool       result       = false;
            string     subTableArg  = this.GetSubTableArg <T>();
            DtoMapping dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();
            string     tableName    = dtoDbMapping.GetTableName(subTableArg);

            using (DbCommand dbCommand = dbProvider.GetCheckTableExistsDbCommand(tableName))
            {
                try
                {
                    SetDbConnection(dbCommand);
                    using (DbDataReader dr = dbCommand.ExecuteReader())
                    {
                        result = dr.HasRows;
                        dr.Close();
                    }
                    CloseDbConnection(dbCommand);
                }
                catch (Exception ex)
                {
                    CloseDbConnection(dbCommand);
                    throw ex;
                }
            }
            return(result);
        }
示例#10
0
        /// <summary>
        /// 获取建表Sql
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="subTableArg">表名称,如果为空,则使用T对应表名称</param>
        /// <returns></returns>
        public override string GetCreateTableSql <T>(string subTableArg = null)
        {
            //表名 查询字段名 主键字段名
            DtoMapping    dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();
            List <PiMap>  piMapList    = DtoMappingHelper.GetPiMapList <T>();
            string        tableName    = dtoDbMapping.GetTableName(subTableArg);
            StringBuilder sqlBuilder   = new StringBuilder();

            sqlBuilder.Append($"Create table public.{tableName}(\r\n");
            for (int i = 0; i < piMapList.Count; i++)
            {
                if (i < piMapList.Count - 1)
                {
                    sqlBuilder.Append(CreateField(piMapList[i]));
                }
                else
                {
                    sqlBuilder.Append(CreateField(piMapList[i], true));
                }
            }
            sqlBuilder.Append(")\r\n");
            for (int i = 0; i < piMapList.Count; i++)
            {
                if (piMapList[i].IsIgnore != true)
                {
                    FieldAttribute attr = piMapList[i].FieldAttr;
                    if (!string.IsNullOrEmpty(attr.DisplayText))
                    {
                        sqlBuilder.Append($" comment on column public.{tableName}.{piMapList[i].FieldName} is '{attr.DisplayText}';\r\n");
                    }
                }
            }
            return(sqlBuilder.ToString());
        }
示例#11
0
        /// <summary>
        /// 获取建表Sql
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="subTableArg">表名称,如果为空,则使用T对应表名称</param>
        /// <returns></returns>
        public override string GetCreateTableSql <T>(string subTableArg = null)
        {
            //表名 查询字段名 主键字段名
            DtoMapping   dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();
            List <PiMap> piMapList    = DtoMappingHelper.GetPiMapList <T>();

            string tableName = dtoDbMapping.GetTableName(subTableArg);

            StringBuilder sqlBuilder = new StringBuilder();

            sqlBuilder.Append($"Create table [{tableName}](\r\n");
            for (int i = 0; i < piMapList.Count; i++)
            {
                if (i < piMapList.Count - 1)
                {
                    sqlBuilder.Append(CreateField(piMapList[i]));
                }
                else
                {
                    sqlBuilder.Append(CreateField(piMapList[i], true));
                }
            }
            sqlBuilder.Append(")\r\n");
            return(sqlBuilder.ToString());
        }
示例#12
0
        /// <summary>
        /// 查询对象表字段信息
        /// </summary>
        /// <returns>受影响记录数</returns>
        public List <FieldModel> GetTableFieldList <T>()
        {
            string     subTableArg  = this.GetSubTableArg <T>();
            DtoMapping dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();
            string     tableName    = dtoDbMapping.GetTableName(subTableArg);

            return(GetTableFieldList(tableName));
        }
示例#13
0
        /// <summary>
        /// 获取分页查询DbCommand
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="filter">过滤条件</param>
        /// <param name="subTableArg">表名称,如果为空,则使用T对应表名称</param>
        /// <returns></returns>
        public override DbCommand GetQueryRecordsPageDbCommand <T>(QueryFilter filter, string subTableArg = null)
        {
            DbCommand dbCommand = CreateDbCommand();

            //表名 查询字段名 主键字段名
            string sqlStr = "Select {1} From {0} t1" +
                            ",(Select Top (@UpRecNum) row_number() OVER (@OrderStr) Num,{2} From {0} @QueryStr) t2" +
                            " Where t1.{2}=t2.{2} And t2.Num>@LowRecNum Order By t2.Num Asc";
            string selectParams = null;

            string queryStr = null;
            string orderStr = null;

            DtoMapping   dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();
            List <PiMap> piMapList    = DtoMappingHelper.GetPiMapList <T>(filter);

            foreach (PiMap piMap in piMapList)
            {
                selectParams += string.IsNullOrEmpty(selectParams) ? "t2.Num,t1." + piMap.FieldName : ",t1." + piMap.FieldName;
            }
            if (filter != null && filter.ItemList.Count > 0)
            {
                queryStr = filter.FilterSQLString;
            }
            if (filter != null && !string.IsNullOrEmpty(filter.OrderSQLString))
            {
                orderStr = filter.OrderSQLString;
            }
            else
            {   //默认By 主键 Asc
                orderStr = "order by {2} asc";
            }
            sqlStr = sqlStr.Replace("@QueryStr", queryStr);
            sqlStr = sqlStr.Replace("@LowRecNum", filter.FilterStartIndex.ToString());
            sqlStr = sqlStr.Replace("@UpRecNum", filter.FilterEndIndex.ToString());
            sqlStr = sqlStr.Replace("@OrderStr", orderStr);
            if (filter != null)
            {
                for (int i = 0; i < filter.FilterParameters.Count; i++)
                {
                    DbParameter dbParameter = dbCommand.CreateParameter();
                    dbParameter.Direction     = ParameterDirection.Input;
                    dbParameter.ParameterName = filter.FilterParameters[i].ParameterName;
                    dbParameter.Value         = filter.FilterParameters[i].ParameterValue;
                    dbParameter.DbType        = filter.FilterParameters[i].ParameterDbType;
                    dbCommand.Parameters.Add(dbParameter);
                }
            }
            DbParameter outDbParameter = dbCommand.CreateParameter();

            outDbParameter.Direction     = ParameterDirection.Output;
            outDbParameter.ParameterName = "@RecCount";
            outDbParameter.Size          = 8;
            dbCommand.Parameters.Add(outDbParameter); //RecCount 总记录数
            dbCommand.CommandText = string.Format(sqlStr, dtoDbMapping.GetTableName(subTableArg), selectParams, dtoDbMapping.PkMap.FieldName);
            return(dbCommand);
        }
示例#14
0
        /// <summary>
        /// 获取检查表是否存在DbCommand
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="subTableArg">表名称,如果为空,则使用T对应表名称</param>
        /// <returns></returns>
        public override DbCommand GetCheckTableExistsDbCommand <T>(string subTableArg = null)
        {
            DbCommand  dbCommand    = CreateDbCommand();
            DtoMapping dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();
            string     tableName    = dtoDbMapping.GetTableName(subTableArg);

            dbCommand.CommandText = $"Select * from information_schema.tables where table_schema='public' and table_type='BASE TABLE' and table_name='{tableName}';";
            return(dbCommand);
        }
示例#15
0
        /// <summary>
        /// 获取检查表是否存在DbCommand
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="subTableArg">表名称,如果为空,则使用T对应表名称</param>
        /// <returns></returns>
        public override DbCommand GetCheckTableExistsDbCommand <T>(string subTableArg = null)
        {
            DbCommand  dbCommand    = CreateDbCommand();
            DtoMapping dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();
            string     tableName    = dtoDbMapping.GetTableName(subTableArg);

            dbCommand.CommandText = $"select *  from sqlite_master where type='table' and name = '{tableName}';";
            return(dbCommand);
        }
示例#16
0
        /// <summary>
        /// 获取检查表是否存在DbCommand
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="subTableArg">表名称,如果为空,则使用T对应表名称</param>
        /// <returns></returns>
        public override DbCommand GetCheckTableExistsDbCommand <T>(string subTableArg = null)
        {
            DbCommand  dbCommand    = CreateDbCommand();
            DtoMapping dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();
            string     tableName    = dtoDbMapping.GetTableName(subTableArg);

            dbCommand.CommandText = $"Select id from dbo.sysobjects where id = object_id(N'[dbo].[{tableName}]')";
            return(dbCommand);
        }
示例#17
0
        /// <summary>
        /// dr转换为Dto实体对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dr"></param>
        /// <returns></returns>
        public static T ToEntity <T>(this DataRow dr) where T : class, new()
        {
            DtoMapping dtoMapping = DtoMappingHelper.GetDtoMapping <T>();

            if (dtoMapping.EntityConvertor == null)
            {
                dtoMapping.EntityConvertor = EntityConvertor.CreateEntityConvertor <T>();   //存入dtoMapping中,缓存起来
            }
            return((T)((EntityConvertorDelegate)dtoMapping.EntityConvertor)(dr));
        }
示例#18
0
        /// <summary>
        /// 获取插入DbCmd
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list"></param>
        /// <param name="piMapList">查询属性MapList</param>
        /// <param name="subTableArg">表名称参数.如果TableAttr设置Name.则根据Name格式化</param>
        /// <returns></returns>
        internal DbCommand GetInsertDbCmd <T>(List <T> list, List <PiMap> piMapList, string subTableArg = null) where T : class, new()
        {
            DbCommand  dbCommand    = CreateDbCommand();
            DtoMapping dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();

            #region 设置DbCommand
            string sqlStr      = "Insert into {0} ({1}) values{2}";
            string fieldParams = null;
            string valueParams = null;

            foreach (PiMap piMap in piMapList)
            {
                PropertyInfo pi = piMap.Pi;
                if (piMap.FieldAttr.ReadOnly)
                {
                    continue;                            //跳过只读字段
                }
                if (piMap == dtoDbMapping.PkMap && dtoDbMapping.IsAutoIncrementPk)
                {   //如果是自增主键 跳过插入
                    continue;
                }
                fieldParams = string.IsNullOrEmpty(fieldParams) ? piMap.FieldName : fieldParams + "," + piMap.FieldName;
            }
            StringBuilder strBuilder = new StringBuilder();
            for (int i = 0; i < list.Count; i++)
            {
                strBuilder.Append("(");
                StringBuilder itemBuilder = new StringBuilder();
                foreach (PiMap piMap in piMapList)
                {
                    PropertyInfo pi = piMap.Pi;
                    if (piMap.FieldAttr.ReadOnly)
                    {
                        continue;                            //跳过只读字段
                    }
                    if (piMap == dtoDbMapping.PkMap && dtoDbMapping.IsAutoIncrementPk)
                    {   //如果是自增主键 跳过插入
                        continue;
                    }
                    itemBuilder.Append($"@{piMap.FieldName}_{i},");
                    DbParameter dbParameter = dbCommand.CreateParameter();
                    dbParameter.Direction     = ParameterDirection.Input;
                    dbParameter.ParameterName = $"@{piMap.FieldName}_{i}";
                    dbParameter.Value         = GetParameterValue(piMap, list[i]);
                    dbParameter.DbType        = piMap.DbType;
                    dbCommand.Parameters.Add(dbParameter);
                }
                strBuilder.Append(itemBuilder.ToString().TrimEnd(','));
                strBuilder.Append("),");
            }
            valueParams           = strBuilder.ToString().TrimEnd(',');
            dbCommand.CommandText = string.Format(sqlStr, dtoDbMapping.GetTableName(subTableArg), fieldParams, valueParams);
            #endregion
            return(dbCommand);
        }
示例#19
0
        /// <summary>
        /// This method gets called by the runtime. Use this method to add services to the container.
        /// </summary>
        public void ConfigureServices(IServiceCollection services)
        {
            DtoMapping.WebApiConfigure();

            // Register the IConfiguration instance which MyOptions binds against.
            services.Configure <MyOptions>(Configuration.GetSection("MyOptions"));

            // Add framework services.
            services.AddDbContext <LovePlatformContext>(options =>
                                                        options.UseMySql(Configuration.GetConnectionString("DefaultConnection")));
            services.AddMvc(options =>
            {
                options.Filters.Add(new ValidateModelAttribute());
                options.Filters.Add(new CustomExceptionFilterAttribute());
            }).AddJsonOptions(op => op.SerializerSettings.ContractResolver = new DefaultContractResolver());

            // Add application services.
            services.AddScoped <PatientService>();
            services.AddScoped <WeightService>();
            services.AddScoped <UserService>();
            services.AddScoped <TreatService>();
            services.AddScoped <TreatImageService>();
            services.AddScoped <DiagnoseService>();
            services.AddScoped <OssService>();
            services.AddScoped <UserService>();
            services.AddScoped <BloodPressureService>();

            services.AddScoped <PatientRepository>();
            services.AddScoped <WeightRepository>();
            services.AddScoped <UserRepository>();
            services.AddScoped <TreatRepository>();
            services.AddScoped <TreatImageRepository>();
            services.AddScoped <DiagnoseRepository>();
            services.AddScoped <OssRepository>();
            services.AddScoped <UserRepository>();
            services.AddScoped <BloodPressureRepository>();

            services.AddScoped <IUnitWork, UnitWork>();

            // Register the Swagger generator, defining one or more Swagger documents
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Info {
                    Title = "WebAPI", Version = "v1"
                });

                //Set the comments path for the swagger json and ui.
                var basePath      = PlatformServices.Default.Application.ApplicationBasePath;
                var webapiXmlPath = Path.Combine(basePath, "LovePlatform.WebAPI.xml");
                c.IncludeXmlComments(webapiXmlPath);
                var domainXmlPath = Path.Combine(basePath, "LovePlatform.DTO.xml");
                c.IncludeXmlComments(domainXmlPath);
            });
        }
示例#20
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            DtoMapping.H5Configure();

            // Add framework services.
            services.AddMvc().AddJsonOptions(op => op.SerializerSettings.ContractResolver = new DefaultContractResolver());

            // Register the IConfiguration instance which MyOptions binds against.
            services.Configure <MyOptions>(Configuration.GetSection("MyOptions"));

            services.AddDirectoryBrowser();
        }
示例#21
0
        /// <summary>
        /// 使用BulkCopy插入数据
        /// 目前仅支持MsSql(Sql Server)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list">数据List</param>
        /// <param name="batchSize">BatchSize</param>
        /// <param name="timeout">BulkCopyTimeout</param>
        /// <param name="useTransaction">使用事务</param>
        /// <param name="progress">0,1 进度</param>
        public void BulkCopy <T>(List <T> list, int batchSize, int timeout = 0, bool useTransaction = true, IProgress <float> progress = null)
        {
            if (list == null || list.Count <= 0)
            {
                return;
            }
            DtoMapping dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();
            string     tableName    = dtoDbMapping.GetTableName();
            DataTable  dt           = EntityToDataTable(list);

            dbProvider.BulkCopy(tableName, dt, batchSize, timeout, useTransaction, progress);
        }
示例#22
0
        public static void WireUp(Container container)
        {
            DtoMapping.Config();

            container.Register <IFlightRepository, FlightRepository>(Lifestyle.Scoped);
            container.Register <IFlightCalculationService, FlightCalculationService>(Lifestyle.Singleton);
            container.Register <IFlightGenerationService, FlightGenerationService>(Lifestyle.Scoped);
            container.Register <FlightScheduleContext>(Lifestyle.Scoped);

            container.Register <DbConnection>(() =>
            {
            });
        }
示例#23
0
        /// <summary>
        /// 获取更新DbCmd
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list"></param>
        /// <param name="piMapList">查询属性MapList</param>
        /// <param name="subTableArg">表名称参数.如果TableAttr设置Name.则根据Name格式化</param>
        /// <returns></returns>
        internal DbCommand GetUpdateDbCmd <T>(List <T> list, List <PiMap> piMapList, string subTableArg = null)
        {
            DbCommand  dbCommand    = CreateDbCommand();
            DtoMapping dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();

            #region 设置DbCommand

            StringBuilder strBuilder = new StringBuilder();
            string        sqlStr     = "Update {0} set {1} where {2};";
            for (int i = 0; i < list.Count; i++)
            {
                string setParams   = null;
                string whereParams = null;
                T      dto         = list[i];
                foreach (PiMap piMap in piMapList)
                {
                    if (piMap == dtoDbMapping.PkMap && dtoDbMapping.IsAutoIncrementPk)
                    {   //如果是自增主键 跳过更新
                        continue;
                    }
                    DbParameter dbParameter = dbCommand.CreateParameter();
                    dbParameter.Direction     = ParameterDirection.Input;
                    dbParameter.ParameterName = $"@{piMap.FieldName}_{i}";
                    dbParameter.Value         = GetParameterValue(piMap, dto);
                    dbParameter.DbType        = piMap.DbType;
                    dbCommand.Parameters.Add(dbParameter);

                    if (!string.IsNullOrEmpty(setParams))
                    {
                        setParams += ",";
                    }
                    setParams += $"{piMap.FieldName}={dbParameter.ParameterName}";
                }
                DbParameter whereParameter = dbCommand.CreateParameter();
                whereParameter.Direction     = ParameterDirection.Input;
                whereParameter.ParameterName = $"@where{dtoDbMapping.PkMap.FieldName}{i}";
                object pkValue = dtoDbMapping.PkMap.Pi.GetValue(dto);
                whereParameter.Value = pkValue != null ? pkValue : DBNull.Value;
                dbCommand.Parameters.Add(whereParameter);
                whereParams = $"{dtoDbMapping.PkMap.FieldName}={whereParameter.ParameterName}";

                string updateStr = string.Format(sqlStr, dtoDbMapping.GetTableName(subTableArg), setParams, whereParams);
                strBuilder.Append(updateStr);
            }
            dbCommand.CommandText = strBuilder.ToString();
            #endregion

            return(dbCommand);
        }
示例#24
0
        /// <summary>
        /// 查询符合条件的记录数
        /// </summary>
        /// <param name="where">查询条件</param>
        /// <returns></returns>
        public int Count <T>(Expression <Func <T, bool> > where = null) where T : class, new()
        {
            DtoMapping dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();

            if (dtoDbMapping.TableAttr.AutoCreate)
            {   //如果是自动建表
                if (!CheckTableExists <T>())
                {
                    return(0);
                }
            }
            IQuery <T> query = IQuery <T>().FromTable(this.GetSubTableArg <T>());

            return(query.Count(where));
        }
示例#25
0
        /// <summary>
        /// 获取分页查询DbCommand
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="filter">过滤条件</param>
        /// <param name="subTableArg">表名称,如果为空,则使用T对应表名称</param>
        /// <returns></returns>
        public override DbCommand GetQueryRecordsPageDbCommand <T>(QueryFilter filter, string subTableArg = null)
        {
            DbCommand dbCommand = CreateDbCommand();

            //表名 查询字段名 主键字段名
            string sqlStr       = "Select {1} From {0} @QueryStr @OrderStr limit @PageSize offset @LowRecNum;";
            string selectParams = null;

            string       queryStr     = null;
            string       orderStr     = null;
            DtoMapping   dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();
            List <PiMap> piMapList    = DtoMappingHelper.GetPiMapList <T>(filter);

            foreach (PiMap piMap in piMapList)
            {
                selectParams += string.IsNullOrEmpty(selectParams) ? piMap.FieldName : "," + piMap.FieldName;
            }
            if (filter != null && filter.ItemList.Count > 0)
            {
                queryStr = filter.FilterSQLString;
            }
            if (filter != null && !string.IsNullOrEmpty(filter.OrderSQLString))
            {
                orderStr = filter.OrderSQLString;
            }
            else
            {   //默认By 主键 Asc
                orderStr = "order by {2} asc";
            }
            sqlStr = sqlStr.Replace("@QueryStr", queryStr);
            sqlStr = sqlStr.Replace("@LowRecNum", filter.FilterStartIndex.ToString());
            sqlStr = sqlStr.Replace("@PageSize", filter.PageSize.ToString());
            sqlStr = sqlStr.Replace("@OrderStr", orderStr);
            if (filter != null)
            {
                for (int i = 0; i < filter.FilterParameters.Count; i++)
                {
                    DbParameter dbParameter = dbCommand.CreateParameter();
                    dbParameter.Direction     = ParameterDirection.Input;
                    dbParameter.ParameterName = filter.FilterParameters[i].ParameterName;
                    dbParameter.Value         = filter.FilterParameters[i].ParameterValue;
                    dbParameter.DbType        = filter.FilterParameters[i].ParameterDbType;
                    dbCommand.Parameters.Add(dbParameter);
                }
            }
            dbCommand.CommandText = string.Format(sqlStr, dtoDbMapping.GetTableName(subTableArg), selectParams, dtoDbMapping.PkMap.FieldName);
            return(dbCommand);
        }
示例#26
0
        public static List <T> ToList <T>(this DataTable dt) where T : class, new()
        {
            List <T> list = new List <T>();

            if (dt != null && dt.Rows.Count > 0)
            {
                DtoMapping dtoMapping = DtoMappingHelper.GetDtoMapping <T>();
                foreach (DataRow dr in dt.Rows)
                {
                    list.Add(dr.ToEntity <T>());
                }
                dt.Dispose();
                dt = null;
            }
            return(list);
        }
示例#27
0
        /// <summary>
        /// 保存or更新数据对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dto">实体对象</param>
        /// <param name="select">查询属性</param>
        public int Set <T>(T dto, Expression <Func <T, object> > select = null) where T : class, new()
        {
            ExHelper.ThrowIfNull(dto, "操作对象不能为空.");
            int        rowCount     = 0;
            DtoMapping dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();
            object     pkValue      = dtoDbMapping.PkMap.Pi.GetValue(dto);

            if (ExHelper.IsNullOrEmpty(pkValue))
            {
                rowCount = Add(dto, select);
            }
            else
            {
                rowCount = Update(dto, select);
            }
            return(rowCount);
        }
示例#28
0
        /// <summary>
        /// 批量保存数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list">实体对象</param>
        /// <param name="select">查询属性</param>
        /// <param name="useTransaction">使用事务操作 默认false</param>
        /// <param name="progress">保存进度</param>
        public int SetList <T>(List <T> list, Expression <Func <T, object> > select = null, bool useTransaction = false, IProgress <double> progress = null) where T : class, new()
        {
            if (list == null || list.Count <= 0)
            {
                return(0);
            }
            int        rowCount     = 0;
            DtoMapping dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();
            List <T>   addList      = new List <T>();
            List <T>   updateList   = new List <T>();

            #region 拆分新增或更新对象List
            for (int i = 0; i < list.Count; i++)
            {
                object pkValue = dtoDbMapping.PkMap.Pi.GetValue(list[i]);
                if (ExHelper.IsNullOrEmpty(pkValue))
                {
                    addList.Add(list[i]);
                }
                else
                {
                    updateList.Add(list[i]);
                }
            }
            #endregion

            if (useTransaction)
            {
                if (addList.Count > 0 && updateList.Count > 0)
                {
                    throw new Exception("插入和更新操作同时存在时,不能启用事务.");
                }
            }
            if (addList.Count > 0)
            {
                rowCount += AddList(addList, select, useTransaction, progress);
            }
            if (updateList.Count > 0)
            {
                rowCount += UpdateList(updateList, select, useTransaction, progress);
            }
            return(rowCount);
        }
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            /*Remove XML Formatter for JSON response*/
            GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

            // Web API routes
            config.MapHttpAttributeRoutes();

            //AutoMapper Initialize
            DtoMapping.Map();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
                );
        }
示例#30
0
        /// <summary>
        /// 添加分表参数.返回当前SubTableDbContext
        /// </summary>
        /// <typeparam name="T">操作对象类型</typeparam>
        /// <param name="subTableArg">分表参数</param>
        /// <returns>返回当前SubTableDbContext</returns>
        public SubTableDbContext AddSubTableArg <T>(object subTableArg)
        {
            if (subTableArgList.Any(kv => kv.Key == typeof(T)))
            {
                throw new Exception($"不能为类型{typeof(T).Name}重复添加分表参数");
            }
            DtoMapping dtoDbMapping = DtoMappingHelper.GetDtoMapping <T>();
            string     tableName    = dtoDbMapping.TableAttr.Name;

            if (string.IsNullOrEmpty(tableName) || !tableName.Contains("{0}"))
            {
                throw new Exception("必须为分表对象" + typeof(T).Name + "指定包含{0}参数的TableName属性");
            }
            if (subTableArg == null)
            {
                throw new Exception("分表参数不能为空");
            }
            this.subTableArgList.Add(new KeyValuePair <Type, string>(typeof(T), subTableArg.ToString()));
            return(this);
        }