6K Star 11.8K Fork 4K

GVPdotNET China / Furion

 / 详情

DeleteNowAsync(Key)有时无法删除问题

已完成
创建于  
2021-06-17 16:50

Furion 版本号

哪个版本号?
2.8.3

Web 项目类型

  • WebApi
  • Mvc
  • Razor Pages
  • Blazor Server

描述你的问题

通过

public async Task Delete(Guid Id)
        {
            var entity = _repository.FirstAsync(u=>u.Id == Id);
            await _repository.DeleteNowAsync(Id);
        }  

方式无法删除,无任何错误。移除var entity = _repository.FirstAsync(u=>u.Id == Id);后可以删除。


异常堆栈信息

无异常


代码或代码仓库

查看源码中:

private TEntity BuildDeletedEntity(object key, bool isRealDelete = true)
        {
            // 读取主键
            var keyProperty = EntityType.FindPrimaryKey().Properties.AsEnumerable().FirstOrDefault()?.PropertyInfo;
            if (keyProperty == null) return default;

            // 创建实体对象并设置主键值
            var entity = Activator.CreateInstance<TEntity>();
            keyProperty.SetValue(entity, key);

            if (isRealDelete)
            {
                // 设置实体状态为已删除
                ChangeEntityState(entity, EntityState.Deleted);
            }

            return entity;
        }

在新建实体前,未判断上下文中是否已经有该实体,导致上下文出现两个相同key的实体,后加入的实体貌似被忽略了。

数据库信息

  • Sqlite
  • SqlServer
  • Mysql
  • Oracle
  • PGSql
  • Firebird
  • Cosmos

期待结果

建议在BuildDeletedEntity中判断该实体是否已经存在上下文,存在则改变实体状态,否则走现有逻辑。

评论 (1)

邑尘 创建了任务
邑尘 关联仓库设置为dotNET China/Furion
百小僧 任务状态待办的 修改为进行中
百小僧 负责人设置为百小僧
百小僧 添加了
 
建议
标签
百小僧 添加了
 
漏洞
标签
百小僧 添加了
 
优化
标签
百小僧 里程碑设置为Furion 2021
百小僧 关联分支设置为master
百小僧 计划截止日期设置为2021-06-18
百小僧 计划开始日期设置为2021-06-17
百小僧 计划截止日期2021-06-18 修改为2021-06-17
百小僧 置顶等级设置为
百小僧 优先级设置为严重
百小僧 通过 dotnetchina/Furion Commit df05e01任务状态进行中 修改为已完成
百小僧 置顶等级 修改为不置顶
展开全部操作日志

会在 v2.9.1 版本发布

百小僧 关联分支master 修改为未关联

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
974299 monksoul 1578937227
C#
1
https://gitee.com/dotnetchina/Furion.git
git@gitee.com:dotnetchina/Furion.git
dotnetchina
Furion
Furion

搜索帮助