예제 #1
0
        public async Task <T> InsertAsync <T>(T entity, Enum product) where T : class
        {
            try
            {
                if (entity == null)
                {
                    return(null);
                }

                var assemblies = new List <Assembly> {
                    Assembly.GetAssembly(typeof(T))
                };
                DapperAsyncExtensions.SetMappingAssemblies(assemblies);

                var t = typeof(T);
                var proModifiedDtTime = t.GetProperty("ModifiedOn");
                if (proModifiedDtTime != null)
                {
                    proModifiedDtTime.SetValue(entity, DateTime.Now, null);
                }

                var proCreatedDtTime = t.GetProperty("CreatedOn");
                if (proCreatedDtTime != null)
                {
                    proCreatedDtTime.SetValue(entity, DateTime.Now, null);
                }

                return(await WithConnection(async c =>
                {
                    var id = await c.InsertAsync(entity);
                    return await GetAsync <T>(id, product);
                }, product));
            }
            catch (Exception ex)
            {
                _logger.Error(ex.Message + "------" + ex.StackTrace);
                throw;
            }
        }
예제 #2
0
        public async Task <T> GetAsync <T>(object parameters, Enum product) where T : class
        {
            var assemblies = new List <Assembly> {
                Assembly.GetAssembly(typeof(T))
            };

            DapperAsyncExtensions.SetMappingAssemblies(assemblies);

            string query = "Select * from [{tablename}] ";

            query = query.Replace("{tablename}", typeof(T).Name);

            //var whereclause = parameters.GetType().GetProperties().Select(prop => prop.Name + "=" + "@" + prop.Name).ToList();

            List <string> whereclause = new List <string>();

            foreach (var prop in parameters.GetType().GetProperties())
            {
                var propValue = prop.GetValue(parameters, null);

                if (propValue == null)
                {
                    whereclause.Add(prop.Name + " is null");
                }
                else
                {
                    whereclause.Add(prop.Name + "=" + "@" + prop.Name);
                }
            }
            if (whereclause.Any())
            {
                query = query + " where " + string.Join(" and ", whereclause);
            }

            return(await WithConnection(async c => await c.QueryFirstOrDefaultAsync <T>(query, parameters, commandType: CommandType.Text), product));
        }
예제 #3
0
        public async Task <IEnumerable <decimal> > InsertMultipleAsync <T>(List <T> entities, Enum product)
            where T : class
        {
            try
            {
                if (!entities.Any())
                {
                    return(null);
                }
                var assemblies = new List <Assembly> {
                    Assembly.GetAssembly(typeof(T))
                };
                DapperAsyncExtensions.SetMappingAssemblies(assemblies);

                var t      = typeof(T);
                var mapper = DapperExtensions.DapperExtensions.GetMap <T>();

                var tableName = mapper.TableName;

                var query = "insert into " + tableName + " (##columns)  values (##values);SELECT SCOPE_IDENTITY();";

                var columns = new List <string>();
                var values  = new List <string>();

                for (var i = 0; i < entities.Count; i++)
                {
                    foreach (var prop in mapper.Properties)
                    {
                        if (prop.KeyType == KeyType.Identity)
                        {
                            continue;
                        }
                        columns.Add(prop.ColumnName);
                        values.Add("@" + prop.Name + i);
                    }

                    query = query.Replace("##columns", string.Join(",", columns))
                            .Replace("##values", string.Join(",", values));
                }

                var p = new DynamicParameters();
                for (var i = 0; i < entities.Count; i++)
                {
                    foreach (var prop in mapper.Properties)
                    {
                        if (prop.KeyType == KeyType.Identity)
                        {
                            continue;
                        }
                        columns.Add(prop.ColumnName);
                        values.Add(prop.Name + i);

                        var pro = t.GetProperty(prop.Name);
                        if (pro != null)
                        {
                            p.Add(prop.Name + i, pro.GetValue(entities[i], null));
                        }
                    }
                }


                return(await WithConnection(async c =>
                {
                    var aa = await c.QueryMultipleAsync(query, p, commandType: CommandType.Text);
                    var identityColumns = await aa.ReadAsync <decimal>();
                    return identityColumns;
                }, product));
            }
            catch (Exception ex)
            {
                _logger.Error(ex.Message + "------" + ex.StackTrace);
                throw;
            }
        }