C# 为什么实体框架引用的列不';甚至不存在?
我的项目出错了 列名“InitialsID\u InitialsID”无效。C# 为什么实体框架引用的列不';甚至不存在?,c#,entity-framework,c#-4.0,entity-framework-6,ef-code-first,C#,Entity Framework,C# 4.0,Entity Framework 6,Ef Code First,我的项目出错了 列名“InitialsID\u InitialsID”无效。 public User ValidateUser(string Username, string Password) { return uow.UserRepository.GetQueryable().Where(x => x.UserName == Username && x.Password == Password).FirstOrDefault(); } 甚至在整个解决方案中也没
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; }
}
缩写为.cs
public class Initials
{
public short InitialsID { get; set; }
public string Code { get; set; }
}
我使用的是代码优先的方法。您的数据库似乎没有使用新模型或新模型属性进行迁移, 请迁移您的数据库。 如果使用的是dotnet core,则在项目文件夹类型的cmd中:
dotnet ef migrations add [name]
然后:
dotnet ef databae update
问题在于您的外键配置中。当您引用导航属性
public Initials InitialsID{get;set;}
时,EF正在为此导航属性添加一个隐式外键,按照惯例它是navigationproperty\u navigationPropertyPrimaryKey
,因此它是InitialsID\u InitialsID
如果您确实需要User
model类中的public Initials Initials{get;set;}
navigaation属性,请按如下方式编写外键配置:
public class User
{
public int UserID { get; set; }
public int UserGroupID { get; set; }
......................
public short InitialsId { get; set; }
public Initials Initials { get; set; }
}
您使用的是代码优先的方法?是的,CF approachI可能是错误的,但是公共初始值InitialsID{get;set;}不应该是公共的虚拟初始值Initials{get;set;},并添加一个属性public short InitialsID{get;set;}@PiotrWojsa:嘿,它起作用了。但我不知道为什么一个虚拟人会这么做。