System.InvalidOperationException:无法跟踪类型的实例

时间:2020-05-17 16:29:20

标签: c# entity-framework-core

因此,我尝试创建一个创建页面,但是当我尝试在创建页面上提交值时,出现一条奇怪的错误消息。我已经打了十二个这样的页面,但从未发生过。

这是我的控制器代码:

    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)

有人知道这里可能出什么问题吗?

1 个答案:

答案 0 :(得分:1)

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