sqlclient.sqlexception:无效的列名称classNameID,同时从流利的API获取数据



我是这个EF的新手,我正在从sql db表中获取数据,它给了我错误,例如 invalid classNameId error.

public class ClassName
{
        [Key]
        [Display(Name = "Id:")]
        public int Id { get; set; }
        [Display(Name = "Created By:")]
        [Required(ErrorMessage = "Please enter created by.")]
        [StringLength(5, MinimumLength = 2)]
        public string CreatedBy { get; set; }
        public List<OtherClass> OtherClassList{ get; set; }
}
public class OtherClass
{
        [Column("Control")]
        [Display(Name = "Control:")]
        public String Control { get; set; }
        [ForeignKey("PID")]
        [Column("PID")]
        [Display(Name = "PID:")]
        public int PID{ get; set; }
}

dbContext:

protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<ClassName>()
                .HasKey(p => p.Id);
            modelBuilder.Entity<OtherClass>()
            .HasKey(p=> new { p.Control, p.PID});
}

我使用流利的API从MSSQL获取数据。

问题是无效的ForeignKey注释

[ForeignKey("PID")]
[Column("PID")]
[Display(Name = "PID:")]
public int PID{ get; set; }

ForeignKey令人困惑,因为它根据应用的位置更改参数的含义。当在FK属性上应用时,它指示了导航属性的名称。当在导航属性上应用时,它指示了FK属性的名称。

在您的情况下,它应用于fk属性,但指定相同的属性名称,因此它被简单地忽略,EF使用与List<OtherClass> OtherClassList关系相关的FK属性的默认常规名称,这就是为什么您要获得该属性非现有列。

要解决该问题,要么在其他类的导航属性上应用属性(因为您在类中没有需要FK的导航属性(:

[ForeignKey(nameof(OtherClass.PID))]
public List<OtherClass> OtherClassList{ get; set; }

或(最好是(用流利的API配置它:

modelBuilder.Entity<ClassName>()
    .HasMany(e => e.OtherClassList)
    .WithOne()
    .HasForeignKey(e => e.PID);

如果您有参考导航属性,除了上述数据注释解决方案外,还可以使用

    [ForeignKey(nameof(ClassName))]
    [Column("PID")]
    [Display(Name = "PID:")]
    public int PID{ get; set; }

    [ForeignKey(nameof(PID))]
    public ClassName ClassName { get; set; }

或流利的API .WithOne()必须更改为.WithOne(e => e.ClassName)

相关内容

  • 没有找到相关文章

最新更新