/// <summary>
        /// 删除实体外键信息信息
        /// </summary>
        /// <param name="ids">要删除的实体外键信息编号</param>
        /// <returns>业务操作结果</returns>
        public async Task <OperationResult> DeleteCodeForeigns(params Guid[] ids)
        {
            List <string> names = new List <string>();

            UnitOfWork.EnableTransaction();
            foreach (var id in ids)
            {
                var entity = ForeignRepository.Query(m => m.Id == id).Select(m => new { D = m, EntityName = m.Entity.Name }).FirstOrDefault();
                if (entity == null)
                {
                    continue;
                }

                int count = await ForeignRepository.DeleteAsync(entity.D);

                if (count > 0)
                {
                    names.Add($"{entity.EntityName}-{entity.D.SelfNavigation}");
                }
            }

            await UnitOfWork.CommitAsync();

            return(names.Count > 0
                ? new OperationResult(OperationResultType.Success, $"实体外键“{names.ExpandAndToString()}”删除成功")
                : OperationResult.NoChanged);
        }
        /// <summary>
        /// 更新实体外键信息信息
        /// </summary>
        /// <param name="dtos">包含更新信息的实体外键信息</param>
        /// <returns>业务操作结果</returns>
        public async Task <OperationResult> UpdateCodeForeigns(params CodeForeignInputDto[] dtos)
        {
            List <string> names = new List <string>();

            UnitOfWork.EnableTransaction();
            foreach (var dto in dtos)
            {
                dto.Validate();
                CodeEntity entity = await EntityRepository.GetAsync(dto.EntityId);

                if (entity == null)
                {
                    return(new OperationResult(OperationResultType.Error, $"编号为“{dto.EntityId}”的实体信息不存在"));
                }
                if (await CheckCodeForeignExists(m => m.SelfNavigation == dto.SelfNavigation && m.EntityId == dto.EntityId, dto.Id))
                {
                    return(new OperationResult(OperationResultType.Error, $"实体“{entity.Name}”中名称为“{dto.SelfNavigation}”的外键信息已存在"));
                }

                int count;
                if (dto.Id == default)
                {
                    CodeForeign foreign = dto.MapTo <CodeForeign>();
                    count = await ForeignRepository.InsertAsync(foreign);
                }
                else
                {
                    CodeForeign foreign = await ForeignRepository.GetAsync(dto.Id);

                    foreign = dto.MapTo(foreign);
                    count   = await ForeignRepository.UpdateAsync(foreign);
                }

                if (count > 0)
                {
                    names.Add($"{entity.Name}-{dto.SelfNavigation}");
                }
            }

            await UnitOfWork.CommitAsync();

            return(names.Count > 0
                ? new OperationResult(OperationResultType.Success, $"导航属性“{names.ExpandAndToString()}”更新成功")
                : OperationResult.NoChanged);
        }
 /// <summary>
 /// 检查实体外键信息信息是否存在
 /// </summary>
 /// <param name="predicate">检查谓语表达式</param>
 /// <param name="id">更新的实体外键信息编号</param>
 /// <returns>实体外键信息是否存在</returns>
 public Task <bool> CheckCodeForeignExists(Expression <Func <CodeForeign, bool> > predicate, Guid id = default)
 {
     return(ForeignRepository.CheckExistsAsync(predicate, id));
 }