Exemplo n.º 1
0
        public async Task <int> Delete <T>(T entity) where T : class, new()
        {
            (string sql, List <DatabaseParameter> parameters) =
                SqlBuilderFactory.GetInstance <T>().BuildDelete(entity);

            var result = await DalClientFactory.GetClient(GetLogicDatabaseName <T>()).Execute(sql, parameters, null);

            return(result.ReturnCode);
        }
Exemplo n.º 2
0
        public async Task <List <T> > QueryLike <T>(IDatabaseParameterLink link, int?recordCount = null) where T : class, new()
        {
            var mapper = EntityMetaDataMapper.GetInstance();

            // 获取组装好的sql和参数
            (string sql, List <DatabaseParameter> parameters) =
                SqlBuilderFactory.GetInstance <T>().BuildSelect <T>(link, recordCount);
            var dataSet = await DalClientFactory.GetClient(GetLogicDatabaseName <T>()).Query(sql, parameters);

            return(mapper.Convert <T>(dataSet));
        }
Exemplo n.º 3
0
        /// <summary>
        /// 根据泛型T,组装该类型的查询语句
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static ISqlBuilder GetInstance <T>()
        {
            var info      = EntityMetaDataMapper.GetInstance().Get <T>();
            var dalClient = DalClientFactory.GetClient(info.DatabaseName);

            if (!sqlBuilders.ContainsKey(dalClient.DatabaseType))
            {
                throw new DalException(ErrorCode.SqlBuilderNotFound, $"There's no sql builder for {dalClient.DatabaseType}");
            }

            return(sqlBuilders[dalClient.DatabaseType]);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 条件查询
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="criteria"></param>
        /// <returns></returns>
        public async Task <List <T> > Query <T>(T criteria, int?recordCount = null) where T : class, new()
        {
            var mapper = EntityMetaDataMapper.GetInstance();

            // 获取组装好的sql和参数
            (string sql, List <DatabaseParameter> parameters) =
                SqlBuilderFactory.GetInstance <T>().BuildSelect(criteria, recordCount);

            var logicName = databaseName;

            if (string.IsNullOrWhiteSpace(logicName))
            {
                logicName = mapper.Get <T>().DatabaseName;
            }

            var client  = DalClientFactory.GetClient(logicName);
            var dataSet = await client.Query(sql, parameters);

            return(mapper.Convert <T>(dataSet));
        }
Exemplo n.º 5
0
        public async Task <int> Insert <T>(T entity) where T : class, new()
        {
            // 获取组装好的sql和参数
            (string sql, List <DatabaseParameter> parameters) =
                SqlBuilderFactory.GetInstance <T>().BuildInsert(entity);

            var client = DalClientFactory.GetClient(GetLogicDatabaseName <T>());
            // 将主键返回给实体
            var hints = DalHints.Create();

            // 如果当前实例含有自增主键,且自增主键的实体不为空,那么需要数据库返回自增住居
            var identity = EntityMetaDataMapper.GetInstance().Get <T>().Columns.Find(p => p.Attribute.Identity);

            if (identity != null && identity.Attribute.Identity && identity.ColumnProperty.GetValue(entity) == null)
            {
                hints.Add(DalHint.SetIdentity);
            }

            var result = await client.Execute(sql, parameters, hints);

            // 如果数据库返回了主键,那么将主键设置回实体
            // 暂时先这么写
            if (result.Identity > 0)
            {
                if (identity.ColumnProperty.PropertyType == typeof(int?))
                {
                    int.TryParse(result.Identity.ToString(), out var value);
                    identity.ColumnProperty.SetValue(entity, value);
                }
                else
                {
                    long.TryParse(result.Identity.ToString(), out var value);
                    identity.ColumnProperty.SetValue(entity, value);
                }
            }

            return(result.ReturnCode);
        }