ASP.NET Core - 无法跟踪实体类型的实例

爱美网

我在编辑操作中尝试更新上下文时遇到问题:

[HttpPost]
public IActionResult Edit(Model.LeaveApplication leaveApplication) {

ViewBag.Title = "Edit Leave Application";
ViewBag.leavePeriodList = context.LeavePeriod.ToList();
ViewBag.LeaveTypeList = context.LeaveType.ToList();

try {    
    if (ModelState.IsValid) {    
        if (!validateDateRanges(leaveApplication, "edit")) {    
            return View(leaveApplication);
        }

        leaveApplication.NumDays = (float)CalculateNoOfDays(leaveApplication);
        context.LeaveApplication.Update(leaveApplication);
        context.SaveChanges();

        return RedirectToAction("Index");
    }    
}
catch (DbUpdateException) {    
    ModelState.AddModelError("", "Unable to edit leave application. " +
    "Please try again, and if the problem persists, " +
    "please see your system administrator.");
}              
    return View(leaveApplication);
}

在此处输入图片说明

我想要做的是检查是否有超过 1 条记录以验证日期范围。如果只有 1 条记录,我将跳过验证并继续更新上下文。但是,我收到一条错误消息:

无法跟踪实体类型“LeaveApplication”的实例,因为已在跟踪具有相同键的此类型的另一个实例。

是什么导致了这个问题?

这是我的构造函数代码:

public class LeaveApplicationController : Controller {

    LeaveDBContext context;
    private readonly UserManager<ApplicationUser> userManager;
    private readonly SignInManager<ApplicationUser> signInManager;

    public LeaveApplicationController(LeaveDBContext context, UserManager<ApplicationUser> userManager, SignInManager<ApplicationUser> signInManager) {

        this.context = context;
        this.userManager = userManager;
        this.signInManager = signInManager;
    }
}
克里斯普拉特

永远不应该尝试保存通过帖子创建的对象。之所以会出现这种情况,有许多安全原因,但您还偶然发现了一个基于 EF 工作方式的实用原因。

如果没有更多的代码库,很难准确判断,但在某些时候,这个特定LeaveApplication实例会加载到您的上下文中,然后开始跟踪它。当您尝试保存不同的 LeaveApplication实例(即已发布的实例)时,EF 无法保存,因为它不跟踪实例,而是跟踪较早加载的实例。

您应该做的是发布到视图模型类。然后,LeaveApplication直接从上下文中拉出要编辑实例,并将视图模型中的数据映射到实例上。最后,保存该实例。然后,您将不再有任何问题,并且您将获得防止过度发布黑客和其他后期数据篡改的附带好处。此外,您的LeaveApplicationid 应该是 URL 的一部分。永远不要相信发布的 ID。时期。由于 URL 中的 id 唯一标识资源,因此您可以基于此轻松实现对象级权限。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法添加对.net core类库asp.net core rc2的引用

来自分类Dev

无法识别ASP.NET Core ViewComponent的Invoke()方法调用

来自分类Dev

在ASP.NET Core中设置实体框架

来自分类Dev

无法在ASP.NET Core项目中添加对.NET Core类库的引用

来自分类Dev

AllowAnonymous无法正常使用ASP.Net Core 3.0

来自分类Dev

ASP.Net Core CookieRequestCultureProvider无法正常工作

来自分类Dev

无法在ASP.NET Core中使用HttpContext.Session

来自分类Dev

Asp.Net Core-无法从Dropzone JS上传文件

来自分类Dev

ASP.NET Core / Kestrel无法持续提供静态内容

来自分类Dev

EF Core:无法跟踪实体类型的实例,因为另一个具有相同键值的实例

来自分类Dev

ASP.NET Core 3.1 OData:无法通过ID选择实体

来自分类Dev

ASP.NET Core Web API InvalidOperationException:无法解析服务

来自分类Dev

Blazor无法连接到ASP.NET Core WebApi(CROS)

来自分类Dev

如何在ASP.NET Core的OData中导航/配置从复杂类型到实体类型的导航?

来自分类Dev

具有Automapper的EF Core引发异常“无法跟踪实体类型”

来自分类Dev

某些服务无法在ASP.NET Core中构建

来自分类Dev

ASP.NET Core MVC Ajax无法正常工作

来自分类Dev

无法在Asp.Net Core中上传图片

来自分类Dev

ASP.NET Core 5.0 RequestSizeLimit无法正常工作

来自分类Dev

.Net core 3.x无键实体类型避免创建表

来自分类Dev

DbContext实例何时在ASP.NET Core 5中处置

来自分类Dev

部分剃刀页面无法在ASP .NET Core中呈现

来自分类Dev

无法在ASP.NET Core中使用中间件

来自分类Dev

ASP.Net Core MVC项目无法配置路由?

来自分类Dev

在ASP.NET Core MVC中创建实体列表

来自分类Dev

EF Core 更新无法跟踪实体类型“广告”的实例

来自分类Dev

ASP.NET Core 实体框架 SQL 查询 SELECT

来自分类Dev

无法使用 EF Core 在 ASP.NET Core 中创建相关实体

来自分类Dev

相关实体的过滤器值(asp.net core)

Related 相关文章

  1. 1

    无法添加对.net core类库asp.net core rc2的引用

  2. 2

    无法识别ASP.NET Core ViewComponent的Invoke()方法调用

  3. 3

    在ASP.NET Core中设置实体框架

  4. 4

    无法在ASP.NET Core项目中添加对.NET Core类库的引用

  5. 5

    AllowAnonymous无法正常使用ASP.Net Core 3.0

  6. 6

    ASP.Net Core CookieRequestCultureProvider无法正常工作

  7. 7

    无法在ASP.NET Core中使用HttpContext.Session

  8. 8

    Asp.Net Core-无法从Dropzone JS上传文件

  9. 9

    ASP.NET Core / Kestrel无法持续提供静态内容

  10. 10

    EF Core:无法跟踪实体类型的实例,因为另一个具有相同键值的实例

  11. 11

    ASP.NET Core 3.1 OData:无法通过ID选择实体

  12. 12

    ASP.NET Core Web API InvalidOperationException:无法解析服务

  13. 13

    Blazor无法连接到ASP.NET Core WebApi(CROS)

  14. 14

    如何在ASP.NET Core的OData中导航/配置从复杂类型到实体类型的导航?

  15. 15

    具有Automapper的EF Core引发异常“无法跟踪实体类型”

  16. 16

    某些服务无法在ASP.NET Core中构建

  17. 17

    ASP.NET Core MVC Ajax无法正常工作

  18. 18

    无法在Asp.Net Core中上传图片

  19. 19

    ASP.NET Core 5.0 RequestSizeLimit无法正常工作

  20. 20

    .Net core 3.x无键实体类型避免创建表

  21. 21

    DbContext实例何时在ASP.NET Core 5中处置

  22. 22

    部分剃刀页面无法在ASP .NET Core中呈现

  23. 23

    无法在ASP.NET Core中使用中间件

  24. 24

    ASP.Net Core MVC项目无法配置路由?

  25. 25

    在ASP.NET Core MVC中创建实体列表

  26. 26

    EF Core 更新无法跟踪实体类型“广告”的实例

  27. 27

    ASP.NET Core 实体框架 SQL 查询 SELECT

  28. 28

    无法使用 EF Core 在 ASP.NET Core 中创建相关实体

  29. 29

    相关实体的过滤器值(asp.net core)

热门标签

归档