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