为什么 entity framework 引用了一个根本不存在的列?

Why entity framework is referencing a column that doesn't even exist?

我的项目抛出错误

列名称无效 '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 方法。

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

dotnet ef migrations add [name]

然后:

dotnet ef databae update

问题出在您的外键配置上。当您引用导航 属性 public Initials InitialsID { get; set; } 时,EF 会为此导航添加一个隐式外键 属性 并且按照约定 navigationPropery_navigationPropertyPrimaryKey 因此它是 InitialsID_InitialsID

如果你真的想要public Initials Initials { get; set; } navigaation 属性 in User model class 然后写你的外键配置如下:

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

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

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