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); }
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)); }
/// <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]); }
/// <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)); }
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); }