【问题标题】:Entity Framework Core 3.0 error - SqlException: Invalid column nameEntity Framework Core 3.0 错误 - SqlException:列名无效
【发布时间】:2020-03-31 14:59:29
【问题描述】:

当我将 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 从数据库中查询后才会出现该错误。

有什么想法吗?

【问题讨论】:

  • 我猜 .NET Core 是指 EF Core。 EF Core 版本之间肯定存在重大更改,请发布有问题的实体类。

标签: c# entity-framework .net-core


【解决方案1】:

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

请检查您的模型和上下文,看看您是否声明了一些关系,以及未根据约定将外键声明到 DBB 中(即外键为 EntityId)。

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

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


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

【讨论】:

  • 我试过了,没用,我必须从数据库本身而不是模型中添加表中的字段
【解决方案2】:

我在从 .net core 2.2 迁移到 3.1 时遇到了同样的问题。在我的情况下,我们的模型从未正确设置所有导航属性/外键。然后我猜是因为 EF 的一些变化,它现在生成的模型不同(可能更准确)。

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

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

【讨论】:

    【解决方案3】:

    添加新字段后您好像忘记生成迁移了。

    dotnet ef 迁移添加 YourMigration

    【讨论】:

    • 我没有新的迁移,我只是将版本从2.2升级到3.0
    • 你能从数据库中展示这些模型和表格吗?
    猜你喜欢
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多