/// <summary> /// 保存领域模型数据 /// </summary> /// <param name="domainModelID">领域模型ID</param> /// <param name="instance">对象实例</param> public void SaveBatch(string domainModelID, List <object> instances, ShardingValue shardingValue = null) { if (string.IsNullOrWhiteSpace(domainModelID)) { throw new ArgumentNullException("DataAccessService.Save.domainModelID"); } if (instances == null) { throw new ArgumentNullException("DataAccessService.Save.instances"); } try { var domainModel = DomainModelManageService.GetInstance().GetDomainModel(domainModelID); if (domainModel == null) { throw new Exception("Dae-0001: Cannot find DomainModel: " + domainModelID); } var shardings = new List <ShardingValue>(); if (shardingValue != null) { instances.ForEach(i => shardings.Add(shardingValue)); } DataAccessEngine.GetInstance().GetDataSaveService().SaveBatch(domainModel, instances, shardings); } catch (Exception e) { throw new Exception("Dae-Save-001: 数据保存失败!", e); } }
/// <summary> /// 获取对象数据 /// </summary> /// <param name="domainModel">领域模型</param> /// <param name="dataId">数据唯一标识</param> /// <param name="shardingValue">分库分表键值对</param> /// <returns>对象数据</returns> public List <DataTable> GetData(string domainModelID, string dataId, ShardingValue shardingValue = null) { if (string.IsNullOrWhiteSpace(domainModelID)) { throw new ArgumentNullException("DataAccessService.GetData.domainModelID"); } if (string.IsNullOrWhiteSpace(dataId)) { throw new ArgumentNullException("DataAccessService.GetData.dataId"); } try { var domainModel = DomainModelManageService.GetInstance().GetDomainModel(domainModelID); if (domainModel == null) { throw new Exception("Dae-0001: Cannot find DomainModel: " + domainModelID); } return(DataAccessEngine.GetInstance().GetDataQueryService().GetData(domainModel, dataId, shardingValue).DataTables); } catch (Exception e) { throw new Exception("Dae-Query-001: 数据查询失败!", e); } }
/// <summary> /// 保存领域模型数据 /// </summary> /// <param name="domainModelID">领域模型ID</param> /// <param name="instance">对象实例</param> public void Save(string domainModelID, object instance, ShardingValue shardingValue = null) { if (string.IsNullOrWhiteSpace(domainModelID)) { throw new ArgumentNullException("DataAccessService.Save.domainModelID"); } if (instance == null) { throw new ArgumentNullException("DataAccessService.Save.instance"); } try { var domainModel = DomainModelManageService.GetInstance().GetDomainModel(domainModelID); if (domainModel == null) { throw new Exception("Dae-0001: Cannot find DomainModel: " + domainModelID); } DataAccessEngine.GetInstance().GetDataSaveService().Save(domainModel, instance, shardingValue); } catch (Exception e) { throw new Exception("Dae-Save-001: 数据保存失败!", e); } }
/// <summary> /// 删除数据 /// </summary> /// <param name="domainModelID">领域模型ID</param> /// <param name="dataIds">数据唯一标识集合</param> /// <param name="shardingKeyValue">分库分表键值对</param> public void Delete(string domainModelID, IList <string> dataIds, ShardingValue shardingValue = null) { if (string.IsNullOrWhiteSpace(domainModelID)) { throw new ArgumentNullException("DataAccessService.Delete.domainModelID"); } if (dataIds == null || dataIds.Count == 0) { throw new ArgumentNullException("DataAccessService.Delete.dataIds"); } try { var domainModel = DomainModelManageService.GetInstance().GetDomainModel(domainModelID); if (domainModel == null) { throw new Exception("Dae-0001: Cannot find DomainModel: " + domainModelID); } DataAccessEngine.GetInstance().GetDataDeleteService().DeleteByIDs(domainModel, dataIds, shardingValue); } catch (Exception e) { throw new Exception("Dae-Delete-002: 数据批量删除失败!", e); } }
/// <summary> /// 通过关联构造结果集映射 /// </summary> /// <param name="asso">关联</param> /// <returns>结果集映射</returns> private ResultMapping CreateAssociationMapping(Association asso) { var model = DomainModelManageService.GetInstance().GetDomainModel(asso.AssoDomainModelID); DomainModelValidate(model); return(this.CreateResultMapping(model)); }
/// <summary> /// 获取对象数据 /// </summary> /// <param name="domainModel">领域模型</param> /// <param name="domainObject">领域对象</param> /// <param name="dataID">数据唯一标识</param> /// <param name="shardingValue">分库分表键值对</param> /// <returns>对象数据</returns> public List <T> GetObjects <T>(string domainModelID, string domainObjectID, QueryFilter queryFilter, Func <QueryResultSet, DomainModel.Spi.DomainModel, DomainModel.Spi.DomainObject, List <T> > ormappingFunc = null) where T : class { if (string.IsNullOrWhiteSpace(domainModelID)) { throw new ArgumentNullException("DataAccessService.GetObjects.domainModelID"); } if (queryFilter == null) { throw new ArgumentNullException("DataAccessService.GetObjects.queryFilter"); } try { var domainModel = DomainModelManageService.GetInstance().GetDomainModel(domainModelID); if (domainModel == null) { throw new Exception("Dae-0001: Cannot find DomainModel: " + domainModelID); } var domainObject = domainModel.DomainObjects.FirstOrDefault(i => i.ID == domainObjectID); var resultSet = DataAccessEngine.GetInstance().GetDataQueryService().GetData(domainModel, domainObject, queryFilter); if (ormappingFunc != null) { return(ormappingFunc(resultSet, domainModel, domainObject)); } return(ORMappingService.MapToObjects <T>(resultSet, domainModel, domainObject)); } catch (Exception e) { throw new Exception("Dae-Query-001: 数据查询失败!", e); } }
/// <summary> /// 获取对象数据 /// </summary> /// <param name="domainModel">领域模型</param> /// <param name="dataID">数据唯一标识</param> /// <param name="shardingValue">分库分表键值对</param> /// <returns>对象数据</returns> public T GetObject <T>(string domainModelID, string dataId, ShardingValue shardingValue = null, Func <QueryResultSet, DomainModel.Spi.DomainModel, DomainModel.Spi.DomainObject, T> ormappingFunc = null) where T : class { if (string.IsNullOrWhiteSpace(domainModelID)) { throw new ArgumentNullException("DataAccessService.GetObject.domainModelID"); } if (string.IsNullOrWhiteSpace(dataId)) { throw new ArgumentNullException("DataAccessService.GetObject.dataId"); } try { var domainModel = DomainModelManageService.GetInstance().GetDomainModel(domainModelID); if (domainModel == null) { throw new Exception("Dae-0001: Cannot find DomainModel: " + domainModelID); } var resultSet = DataAccessEngine.GetInstance().GetDataQueryService().GetData(domainModel, dataId, shardingValue); if (ormappingFunc != null) { return(ormappingFunc(resultSet, domainModel, domainModel.RootDomainObject)); } return(ORMappingService.MapToObject <T>(resultSet, domainModel)); } catch (Exception e) { throw new Exception("Dae-Query-001: 数据查询失败!", e); } }
/// <summary> /// 获取对象数据 /// </summary> /// <param name="domainModel">领域模型</param> /// <param name="domainObject">领域对象</param> /// <param name="queryFilter">查询条件</param> /// <returns>对象数据</returns> public List <DataTable> GetData(string domainModelID, string domainObjectID, QueryFilter queryFilter) { if (string.IsNullOrWhiteSpace(domainModelID)) { throw new ArgumentNullException("DataAccessService.GetData.domainModelID"); } if (string.IsNullOrWhiteSpace(domainObjectID)) { throw new ArgumentNullException("DataAccessService.GetData.domainObjectID"); } if (queryFilter == null) { throw new ArgumentNullException("DataAccessService.GetData.queryFilter"); } try { var domainModel = DomainModelManageService.GetInstance().GetDomainModel(domainModelID); if (domainModel == null) { throw new Exception("Dae-0001: Cannot find DomainModel: " + domainModelID); } var domainObject = domainModel.DomainObjects.FirstOrDefault(i => i.ID == domainObjectID); if (domainObject == null) { throw new Exception("Dae-0001: Cannot find DomainObject: " + domainObjectID); } return(DataAccessEngine.GetInstance().GetDataQueryService().GetData(domainModel, domainObject, queryFilter).DataTables); } catch (Exception e) { throw new Exception("Dae-Query-001: 数据查询失败!", e); } }
/// <summary> /// 删除数据 /// </summary> /// <param name="domainModelID">领域模型ID</param> /// <param name="domainObjectID">领域对象ID</param> /// <param name="dataId">数据唯一标识</param> /// <param name="shardingValue">分库分表键值对</param> public void Delete(string domainModelID, string domainObjectID, string dataId, ShardingValue shardingValue = null) { if (string.IsNullOrWhiteSpace(domainModelID)) { throw new ArgumentNullException("DataAccessService.Delete.domainModelID"); } if (string.IsNullOrWhiteSpace(domainObjectID)) { throw new ArgumentNullException("DataAccessService.Delete.domainObjectID"); } if (string.IsNullOrWhiteSpace(dataId)) { throw new ArgumentNullException("DataAccessService.Delete.dataId"); } try { var domainModel = DomainModelManageService.GetInstance().GetDomainModel(domainModelID); if (domainModel == null) { throw new Exception("Dae-0001: Cannot find DomainModel: " + domainModelID); } var domainObject = domainModel.DomainObjects.FirstOrDefault(i => i.ID == domainObjectID); if (domainObject == null) { throw new Exception("Dae-0001: Cannot find DomainObject: " + domainObjectID); } DataAccessEngine.GetInstance().GetDataDeleteService().DeleteByID(domainModel, domainObject, dataId, shardingValue); } catch (Exception e) { throw new Exception("Dae-Delete-002: 数据批量删除失败!", e); } }
/// <summary> /// 更新指定对象的数据 /// </summary> /// <param name="domainModelID">领域模型ID</param> /// <param name="domainObjectID">领域对象ID</param> /// <param name="instance">对象实例</param> public void Update(string domainModelID, string domainObjectID, object instance, ShardingValue shardingValue = null) { if (string.IsNullOrWhiteSpace(domainModelID)) { throw new ArgumentNullException("DataAccessService.Update.domainModelID"); } if (string.IsNullOrWhiteSpace(domainObjectID)) { throw new ArgumentNullException("DataAccessService.Update.domainObjectID"); } if (instance == null) { throw new ArgumentNullException("DataAccessService.Update.instance"); } try { var domainModel = DomainModelManageService.GetInstance().GetDomainModel(domainModelID); if (domainModel == null) { throw new Exception("Dae-0001: Cannot find DomainModel: " + domainModelID); } var domainObject = domainModel.DomainObjects.FirstOrDefault(i => i.ID == domainObjectID); if (domainObject == null) { throw new Exception("Dae-0001: Cannot find DomainObject: " + domainObjectID); } DataAccessEngine.GetInstance().GetDataUpdateService().Update(domainModel, domainObject, instance, shardingValue); } catch (Exception e) { throw new Exception("Dae-Update-001: 数据保存失败!", e); } }
/// <summary> /// 保存指定对象的数据 /// </summary> /// <param name="domainModelID">领域模型ID</param> /// <param name="domainObjectID">领域对象ID</param> /// <param name="instances">对象实例</param> public void Save(string domainModelID, string domainObjectID, List <object> instances, List <ShardingValue> shardingValues) { if (string.IsNullOrWhiteSpace(domainModelID)) { throw new ArgumentNullException("DataAccessService.Save.domainModelID"); } if (string.IsNullOrWhiteSpace(domainObjectID)) { throw new ArgumentNullException("DataAccessService.Save.domainObjectID"); } if (instances == null) { throw new ArgumentNullException("DataAccessService.Save.instances"); } try { var domainModel = DomainModelManageService.GetInstance().GetDomainModel(domainModelID); if (domainModel == null) { throw new Exception("Dae-0001: Cannot find DomainModel: " + domainModelID); } var domainObject = domainModel.DomainObjects.FirstOrDefault(i => i.ID == domainObjectID); if (domainObject == null) { throw new Exception("Dae-0001: Cannot find DomainObject: " + domainObjectID); } DataAccessEngine.GetInstance().GetDataSaveService().SaveBatch(domainModel, domainObject, instances, shardingValues); } catch (Exception e) { throw new Exception("Dae-Save-001: 数据保存失败!", e); } }