EF Core 无效列名(外键)
EF Core Invalid Column Name (Foreign Keys)
我正在使用 EF Core 2.2
有错误的代码
var ClientCase= _context.Client_Cases.Include(a=>a.Case_Sessions). FirstOrDefault(x => x.Id == id);
错误
System.Data.SqlClient.SqlException: 'Invalid column name
'Client_CaseId'. Invalid column name 'Case_LevelId'. Invalid column
name 'Client_CaseId'. Invalid column name 'Court_CircleId'. Invalid
column name 'Court_HallId'.'
实体
1- Parent Client_Case
public class Client_Cases
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
public string Opponent { get; set; }
public DateTime? StartDate { get; set; }
public DateTime Recieve_Date { get; set; }
[ForeignKey("Clients")]
public long? ClientID { get;set;}
public Clients Client { get; set; }
[ForeignKey("Case_Levels")]
public long? LevelID { get; set; }
public virtual Case_Levels Case_Levels { get; set; }
[ForeignKey("Case_Types")]
public long? TypeID { get; set; }
public virtual Case_Types Case_Types { get; set; }
[ForeignKey("Court_Circles")]
public long? CircleID { get; set; }
public virtual Court_Circles Court_Circles { get; set; }
[ForeignKey("Court_Halls")]
public long? HallID { get; set; }
public virtual Court_Halls Court_Halls { get; set; }
[ForeignKey("Courts")]
public long? CourtID { get; set; }
public virtual Courts Court { get; set; }
[ForeignKey("Case_Status")]
public long? StatusID { get; set; }
public Case_Status Case_Status { get; set; }
[ForeignKey("Lawyers")]
public long? LawyerID { get; set; }
public virtual LawyersData Lawyers { get; set; }
public string Description { get; set; }
public string Code { get; set; }
public string CaseNo { get; set; }
public List<Case_Sessions> Case_Sessions { get; set; }
}
详细实体Case_Session
public class Case_Sessions
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
[ForeignKey("Client_Cases")]
public long? CaseID { get;set;}
public Client_Cases Client_Case { get; set; }
[ForeignKey("Case_Levels")]
public long? LevelID { get; set; }
public Case_Levels Case_Level { get; set; }
[ForeignKey("Court_Circles")]
public long? CircleID { get; set; }
public Court_Circles Court_Circle { get; set; }
[ForeignKey("Court_Halls")]
public long? HallID { get; set; }
public Court_Halls Court_Hall { get; set; }
[ForeignKey("Case_Status")]
public long? StatusID { get; set; }
public Case_Status Case_Status { get; set; }
public DateTime Session_Date { get; set; }
public string Judge_Name { get; set; }
public string Session_Result { get; set; }
public string Notes { get; set; }
}
如果我得到 parent 而没有包含 child 它就可以了。
如果我得到详细信息,它就会起作用。
我知道 EF Core 为外键创建自己的命名约定的错误
但我认为标签外键覆盖了命名约定
现在我哪里错了?
[ForeignKey("")] 是什么意思?将您在 class 中添加的 属性 命名为外键。例如:
public long? CaseID { get;set;}
[ForeignKey("CaseID")]
public Client_Cases Client_Case { get; set; }
public long? CircleID { get; set; }
[ForeignKey("CircleID")]
public Court_Circles Court_Circle { get; set; }
您可以像上面那样使用注释,在您的情况下,需要进行以下更正:
[ForeignKey("Client")] // it should be [ForeignKey("Client")] not an extra s if you using entities name in annotation.
public long? ClientID { get;set;}
public Clients Client { get; set; }
这应该是你的律师关系:
[ForeignKey("Lawyers")]
public long? LawyersID { get; set; }
public virtual LawyersData Lawyers { get; set; }
我假设 LawyersData table 中的主键类型是长的?
我正在使用 EF Core 2.2 有错误的代码
var ClientCase= _context.Client_Cases.Include(a=>a.Case_Sessions). FirstOrDefault(x => x.Id == id);
错误
System.Data.SqlClient.SqlException: 'Invalid column name 'Client_CaseId'. Invalid column name 'Case_LevelId'. Invalid column name 'Client_CaseId'. Invalid column name 'Court_CircleId'. Invalid column name 'Court_HallId'.'
实体
1- Parent Client_Case
public class Client_Cases
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
public string Opponent { get; set; }
public DateTime? StartDate { get; set; }
public DateTime Recieve_Date { get; set; }
[ForeignKey("Clients")]
public long? ClientID { get;set;}
public Clients Client { get; set; }
[ForeignKey("Case_Levels")]
public long? LevelID { get; set; }
public virtual Case_Levels Case_Levels { get; set; }
[ForeignKey("Case_Types")]
public long? TypeID { get; set; }
public virtual Case_Types Case_Types { get; set; }
[ForeignKey("Court_Circles")]
public long? CircleID { get; set; }
public virtual Court_Circles Court_Circles { get; set; }
[ForeignKey("Court_Halls")]
public long? HallID { get; set; }
public virtual Court_Halls Court_Halls { get; set; }
[ForeignKey("Courts")]
public long? CourtID { get; set; }
public virtual Courts Court { get; set; }
[ForeignKey("Case_Status")]
public long? StatusID { get; set; }
public Case_Status Case_Status { get; set; }
[ForeignKey("Lawyers")]
public long? LawyerID { get; set; }
public virtual LawyersData Lawyers { get; set; }
public string Description { get; set; }
public string Code { get; set; }
public string CaseNo { get; set; }
public List<Case_Sessions> Case_Sessions { get; set; }
}
详细实体Case_Session
public class Case_Sessions
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
[ForeignKey("Client_Cases")]
public long? CaseID { get;set;}
public Client_Cases Client_Case { get; set; }
[ForeignKey("Case_Levels")]
public long? LevelID { get; set; }
public Case_Levels Case_Level { get; set; }
[ForeignKey("Court_Circles")]
public long? CircleID { get; set; }
public Court_Circles Court_Circle { get; set; }
[ForeignKey("Court_Halls")]
public long? HallID { get; set; }
public Court_Halls Court_Hall { get; set; }
[ForeignKey("Case_Status")]
public long? StatusID { get; set; }
public Case_Status Case_Status { get; set; }
public DateTime Session_Date { get; set; }
public string Judge_Name { get; set; }
public string Session_Result { get; set; }
public string Notes { get; set; }
}
如果我得到 parent 而没有包含 child 它就可以了。
如果我得到详细信息,它就会起作用。
我知道 EF Core 为外键创建自己的命名约定的错误 但我认为标签外键覆盖了命名约定
现在我哪里错了?
[ForeignKey("")] 是什么意思?将您在 class 中添加的 属性 命名为外键。例如:
public long? CaseID { get;set;}
[ForeignKey("CaseID")]
public Client_Cases Client_Case { get; set; }
public long? CircleID { get; set; }
[ForeignKey("CircleID")]
public Court_Circles Court_Circle { get; set; }
您可以像上面那样使用注释,在您的情况下,需要进行以下更正:
[ForeignKey("Client")] // it should be [ForeignKey("Client")] not an extra s if you using entities name in annotation.
public long? ClientID { get;set;}
public Clients Client { get; set; }
这应该是你的律师关系:
[ForeignKey("Lawyers")]
public long? LawyersID { get; set; }
public virtual LawyersData Lawyers { get; set; }
我假设 LawyersData table 中的主键类型是长的?