首页 > 解决方案 > System.InvalidOperationException:无法跟踪类型的实例

问题描述

所以我正在尝试创建一个创建页面,但是当我尝试在创建页面上提交值时,我收到一条奇怪的错误消息。我已经制作了十几页这样的页面,以前从未发生过。

这是我的控制器代码:

    public ActionResult Create()
    {
        RiskActionplanViewModel vm = new RiskActionplanViewModel();
        return View(vm);
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(int? riskId, int? actionplanId, IFormCollection collection)
    {
        try
        {
            Domain.Models.RiskActionplan riskActionplan = new Domain.Models.RiskActionplan()
            {
                riskId = riskId,
                actionplanId = actionplanId
            };

            _manager.InsertRiskActionplan(riskActionplan);
            return RedirectToAction("Search", "MainRiskanalysis");
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
        return null;
    }

我的经理代码:

    public Models.RiskActionplan InsertRiskActionplan(Models.RiskActionplan riskActionplan)
    {
        using (var context = new Entities.DanoneRiskanalysisContext())
        {
            // Validations
            if (riskActionplan == null) throw new Exception("Riskanalysis is null");
            if (riskActionplan.id > 0) throw new Exception("ID's are given by the database");

            Entities.RiskActionplan entityRiskActionplan = new Entities.RiskActionplan()
            {
                RiskId = riskActionplan.riskId,
                ActionplanId = riskActionplan.actionplanId
            };

            context.Add(entityRiskActionplan);
            context.SaveChanges();

            riskActionplan.id = entityRiskActionplan.Id;
        }
        return riskActionplan;
    }

来自 Stackify 前缀的异常消息:

System.InvalidOperationException:无法跟踪“RiskActionplan”类型的实例,因为它没有主键。只能跟踪具有主键的实体类型。

在 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.GetOrCreateEntry
在 Microsoft.EntityFrameworkCore.DbContext.EntryWithoutDetectChanges
在 Microsoft.EntityFrameworkCore.DbContext.SetEntityState
在 Microsoft.EntityFrameworkCore.DbContext.Add
在 DanoneRiskanalysis.Domain.DanoneRiskanalysisManager.InsertRiskActionplan
在 DanoneRiskanalysis.Web.Controllers .RiskActionplanController.Create

提交表单后,我被重定向到此错误:

处理请求时发生未处理的异常。
InvalidOperationException:无法从返回类型为“Microsoft.AspNetCore.Mvc.ActionResult”的操作方法返回 null。

Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.EnsureActionResultNotNull(ObjectMethodExecutor 执行器,IActionResult actionResult)

有谁知道这里可能出了什么问题?

标签: c#entity-framework-core

解决方案


我过去也有类似的情况。如果相应的表没有主键,则将 [Key] 属性添加到实体的(逻辑主键)属性可以解决问题。


推荐阅读