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

时间:2019-04-16 07:15:26

标签: c# entity-framework c#-4.0 entity-framework-6 ef-code-first

我的项目抛出错误

无效的列名“ 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; }
}

我正在使用“代码优先”方法。

2 个答案:

答案 0 :(得分:2)

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

如果您确实想要public Initials Initials { get; set; }模型类中的User导航属性,请按如下所示编写外键配置:

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

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

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

答案 1 :(得分:1)

似乎您的数据库未使用新模型或新模型属性进行迁移, 请迁移您的数据库。 如果您使用的是dotnet core,请在项目文件夹中的cmd中输入:

a size rotationAngle isLargeArcFlag sweepDirectionFlag endPoint

然后:

dotnet ef migrations add [name]