当我尝试通过执行以下行将Response模型对象保存到数据库中时出现此错误:
[YourClass checkInternetConnectivityWithSuccessCompletion:^{
// your internet is working - add code here
}];
Response表中的RequestId列是从Request表引用的外键。
CreateRequestViewModel 是我根据请求模型创建的视图模型,但只有用户需要填写的字段才能创建请求。
CreateResponseViewModel 是我根据响应模型创建的视图模型,但只有用户填写的字段才能创建响应。
使用命令生成数据库模型:
_context.Add(response);
await _context.SaveChangesAsync(); <-- Exception happens in here
我将CreateResponseViewModel对象中的值映射到控制器操作方法中的Response模型对象,并尝试保存到数据库中,但是出现了此错误。我猜测它可能与实体框架核心中的级联更新/插入有关,但不知道如何修复它。
任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
一般来说,当您的实体与数据库不同步时会发生该错误。根据实体类的当前状态,实体框架认为应该有一个名为CreateRequestViewModelRequestId
的列,但该列实际上不存在于表中。简而言之,您需要运行迁移来更新数据库。
但是,它一点也不清楚你在这里做了什么,并且在课程名称末尾ViewModel
的任何内容都不应该永远进入你的数据库。我想你在这里有更深层次的问题需要解决。
答案 1 :(得分:0)
问题是由Context类中添加这两行引起的:
public virtual DbSet<CreateRequestViewModel> CreateRequest { get; set; }
public virtual DbSet<CreateResponseViewModel> CreateResponse { get; set; }
Chris是对的,ViewModel不应该进入数据库。删除这两行后,它按预期工作。