SqlException:无效的列名称'CreateRequestViewModelRequestId'

时间:2018-01-19 18:13:51

标签: c asp.net-mvc asp.net-core-mvc entity-framework-core

当我尝试通过执行以下行将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模型对象,并尝试保存到数据库中,但是出现了此错误。我猜测它可能与实体框架核心中的级联更新/插入有关,但不知道如何修复它。

任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

一般来说,当您的实体与数据库不同步时会发生该错误。根据实体类的当前状态,实体框架认为应该有一个名为CreateRequestViewModelRequestId的列,但该列实际上不存在于表中。简而言之,您需要运行迁移来更新数据库。

但是,它一点也不清楚你在这里做了什么,并且在课程名称末尾ViewModel的任何内容都不应该永远进入你的数据库。我想你在这里有更深层次的问题需要解决。

答案 1 :(得分:0)

问题是由Context类中添加这两行引起的:

public virtual DbSet<CreateRequestViewModel> CreateRequest { get; set; }
public virtual DbSet<CreateResponseViewModel> CreateResponse { get; set; }

Chris是对的,ViewModel不应该进入数据库。删除这两行后,它按预期工作。