因此,我尝试创建一个创建页面,但是当我尝试在创建页面上提交值时,出现一条奇怪的错误消息。我已经打了十二个这样的页面,但从未发生过。
这是我的控制器代码:
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)
有人知道这里可能出什么问题吗?
答案 0 :(得分:1)
我过去也有类似情况。如果相应的表没有主键,则在实体的(逻辑主键)属性中添加[Key]属性即可解决问题。