实体框架核心3.0错误-SqlException:列名无效



当我将ASP.NET Core MVC从2.2 迁移到3.0 时,我收到以下错误

SqlException:列名"ContractProfileContractId"无效。

抛出错误的我的语句:

var totalemployees =   _context.EmployeeProfile.Where(x => x.Active == true).ToList();

当我将列ContractProfileContractId添加到Employees表中时,应用程序可以工作,但我需要为其他表添加越来越多的列。

我开始在.NET Core 1.1(2017(中编写这个应用程序,并将其迁移到2.0、2.1和2.2(1年前(,现在又迁移到3.0。

我尝试了3.1迁移,但同样的问题仍然存在。

应用程序通过登录屏幕,没有任何错误。只有在尝试使用EF从数据库进行查询后,才会出现错误。

有什么想法吗?

看起来EF Core正在为您的模型生成外键。

请检查您的模型和上下文,看看您是否声明了一些关系,以及外键在哪里没有根据约定声明到DBB中(外键为i-eEntityId(。

如果是这样的话,那么你可以在你的POCO类中装饰你的外键属性(但我很确定它也可以在数据上下文定义期间配置(

/// The DBB Foreign key property
[ForeignKey("RelationProperty")]
[Required]
public int IdRelationProperty { get; set; }

/// 
public virtual XXXType RelationProperty{ get; set; }

我在.net内核2.2到3.1的迁移中遇到了同样的问题。在我的案例中,我们的模型从未正确设置所有导航属性/外键。然后我想,由于EF的一些变化,它现在产生了不同的模型(可能更准确(。

要诊断该问题,您可以添加一个新的迁移,并查看ef认为需要更正的列/FK。然后返回到您的模型构建器并更正设置中缺少的关系。

然后您可以删除迁移并重试,最终您应该看到添加迁移会导致空迁移。

添加新字段后,似乎忘记了生成迁移。

dotnet ef迁移添加YourMigration

对于那些在上面的答案之后仍然面临这个问题的人,请确保没有任何触发器或任何其他sql代码在运行。如果您忘记相应地更新sql中的列名,则可能会发生此错误。

相关内容

最新更新