c# - 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)
有谁知道这里可能出了什么问题?
解决方案
我过去也有类似的情况。如果相应的表没有主键,则将 [Key] 属性添加到实体的(逻辑主键)属性可以解决问题。
推荐阅读
- angular - 在angular8中使ngModel输入大写的正确方法是什么?
- python-3.x - 在 df 列中的 strs 上使用 str.join
- h2o - h2o.ai AutoML StackedEnsemble 给出了错误的优越验证指标
- google-analytics - GTM 解析错误。')' 预期 _ GA + Oracle Bluekai 标记
- android - Android Studio,Kotlin:BitmapFactory.decodeStream() 返回 null
- java - 如何围绕异步代码部分包装方法
- arduino - 将数据发送到云服务器时出错,arduino 滞后
- python - 比较 pandas DataFrame 中的值
- java - Jpa 从 MySQL 数据库中获取不一致的数据
- jquery - 在网站上导航上一篇/下一篇文章的最佳方式