为什么实体框架引用了一个甚至不存在的列?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么实体框架引用了一个甚至不存在的列?相关的知识,希望对你有一定的参考价值。

我的项目正在抛出错误

列名称'InitialsID_InitialsID'无效。

public User ValidateUser(string Username, string Password)
{
    return uow.UserRepository.GetQueryable().Where(x => x.UserName == Username && x.Password == Password).FirstOrDefault();
}

即使整个解决方案中没有该名称的列。

我已经生成了一个迁移脚本,并且它中有该名称,但我将其更改为InitialsID,但它仍然要求使用相同的名称。

我该如何解决?我尝试使用ForeignKey属性等但没有任何作用。

User.cs

public class User
{
    public int UserID { get; set; }
    public int UserGroupID { get; set; }
    public UserGroup UserGroup { get; set; }
    public string UserName { get; set; }
    public string FullName { get; set; }
    public string Email { get; set; }
    public string Designation { get; set; }
    public string Password { get; set; }
    public bool? PasswordExpire { get; set; }
    public DateTime? ExpiryDate { get; set; }
    public bool Status { get; set; }
    public DateTime? CreatedOn { get; set; }
    public string CreatedBy { get; set; }
    public DateTime? ModifiedOn { get; set; }
    public string ModifiedBy { get; set; }

    public string Office { get; set; }

    public string Station { get; set; }

    public Initials InitialsID { get; set; }
}

Initials.cs

public class Initials
{
    public short InitialsID { get; set; }
    public string Code { get; set; }
}

我正在使用Code First方法。

答案

问题出在您的外键配置中。当你引用导航属性public Initials InitialsID { get; set; }时,EF正在为这个导航属性添加一个隐式外键,它按惯例为navigationPropery_navigationPropertyPrimaryKey,因此它是InitialsID_InitialsID

如果你真的想在qazxsw poi模型类中使用qazxsw poi导航属性,那么编写你的外键配置如下:

public Initials Initials { get; set; }
另一答案

您的数据库似乎没有使用新模型或新模型属性迁移,请求迁移您的数据库。如果您使用的是dotnet核心,请在项目文件夹类型的cmd中输入:

User

然后:

public class User
{
    public int UserID { get; set; }
    public int UserGroupID { get; set; }

    ......................

    public short InitialsId { get; set; }
    public Initials Initials { get; set; }
}

以上是关于为什么实体框架引用了一个甚至不存在的列?的主要内容,如果未能解决你的问题,请参考以下文章

实体框架核心关系问题(代码优先) - 重复列

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

实体框架不包括插入查询中具有默认值的列

检测到实体框架自引用循环

实体框架导致循环引用?

如何在实体框架模型中使用通用导航属性?