我有这两个实体:
public partial class Suscriptores
{
public Suscriptores()
{
this.Publicacion = new HashSet<Publicacion>();
}
[Key]
public int IdSuscriptor { get; set; }
public string LogoSuscriptor { get; set; }
public string Identificacion { get; set; }
public string Nombre { get; set; }
public string Direccion { get; set; }
public string Telefono { get; set; }
public string Email { get; set; }
public string Fax { get; set; }
public string Home { get; set; }
public virtual ICollection<Publicacion> Publicacion { get; set; }
}
public partial class Publicacion
{
public Publicacion()
{
this.Edictos = new HashSet<Edictos>();
}
[Key]
public decimal IdPublicacion { get; set; }
public System.DateTime FechaPublicacion { get; set; }
public string IdUsuario { get; set; }
public System.DateTime FechaPublicacionHasta { get; set; }
public System.DateTime FechaArchivoHasta { get; set; }
public int IdSuscriptor { get; set; }
public decimal IdTipoPublicacion { get; set; }
[ForeignKey("IdSuscriptor")]
public virtual Suscriptores Suscriptores { get; set; }
}
当我尝试运行此查询时:
public ActionResult DetailsVSTO(string Identificacion)
{
var SusQ = from s in db.Suscriptores
where s.Identificacion == Identificacion
select s;
return Json(SusQ.First(), JsonRequestBehavior.AllowGet);
}
它抛出此消息:
System.Data.SqlClient.SqlException:无效的列名称“Suscriptores_IdSuscriptor1”
为了解决这个问题,我在 DBContext 添加了这个流畅的 API 代码:
modelBuilder.Entity<Suscriptores>()
.HasMany(x => x.Publicacion)
.WithRequired(x => x.Suscriptores)
.Map(a => a.MapKey("IdSuscriptor"));
但问题依然存在。我该如何解决这个问题?
也尝试添加多对一映射。请使用纯Fluent API,并且应删除[ForeignKey]注释。
modelBuilder.Entity<Publicacion>()
.HasRequired(x => x.Suscriptores)
.WithMany(x => x.Publicacion);
我收到了与非外键列相关的错误,并浪费了太多时间试图找出错误。它在我的代码中,而不是在 EF 或数据库中。我只是以为我已经输入了
this.Property(t => t.Revision).HasColumnName("Revision");
this.Property(t => t.DistributionClass).HasColumnName("DistributionClass");
但是我输入的是
this.Property(t => t.Revision).HasColumnName("Revision");
this.Property(t => t.Revision).HasColumnName("DistributionClass");
我想我正在查看上面的行并输入
t.Revision
而不是 t.DistributionClass
。无论我看多久,我都看不到自己的错误。运气好的话,这会拯救其他一些可怜的灵魂一些时间。
我在我刚刚添加的属性(列)的项目表中遇到了这个问题,多么令人沮丧!
事实证明,我在 Order 的数据模型中有一个 List 属性,并且因为我没有在该配置中忽略它,所以它在 Item 表中导致了同样的问题。除非两个表都有同名的属性,否则这种情况不会发生,所以我必须这样做......无论如何我都应该这样做。
public OrderConfiguration() {
Ignore(p => p.Items);
}
我收到了相同的错误 SqlException 消息,其中数字 1 被附加到我的字段名称中。
当我意识到我错误地假设 [ForeignKey] 注释引用数据库中的字段名称后,我就能够解决这个问题。相反,它们应该与模型中定义的属性名称匹配。
举个例子:
[Column("Organisation_Account_Manager")]
[Display(Name = "Organisation_Account_Manager_ID")]
[DisplayFormat(NullDisplayText = "Unknown")]
public int? Organisation_Account_Manager_ID { get; set; }
[Display(Name = "Account Manager")]
[ForeignKey("Organisation_Account_Manager_ID")]
public Contact Account_Manager { get; set; }
在此示例中它将起作用,因为
[ForeignKey("Organisation_Account_Manager_ID")]
与 public int? Organisation_Account_Manager_ID
完全匹配。以前我的 [ForeignKey] 注释使用 Organisation_Account_Manager
,这是数据库中的字段名称 - 但这是不正确的。
大家好,就我而言,我有一个遗留代码 具有相同外键的不同名称的两个类。 添加注释来引用正确的列以及其他类中具有相同名称的属性名称。然后注释foreignkey在两列之间进行匹配。
[Table("LFile")]
public partial class LFile
{
[Key]
public int FileId { get; set; }
[StringLength(500)]
public string FileName { get; set; }
public int? LRRFileDetailId { get; set; }
public byte[] FileData { get; set; }
public FileType Type { get; set; }
[Column("LUpload_Id")] //Foreign Key of the class
public int? LUploadId { get; set; }
[ForeignKey("LUploadId")] //Foreign key inherited
public virtual LParserProcess LParserProcess { get; set; }
}
只是想分享我的案例。 如果我们有:
我们尝试参考: MyEntity 的属性 ID 类型为 short
Ef core(使用版本 8.0.2)会抱怨“MyEntityId1”列。
更改 MyEntityId 以匹配类型 short 解决了问题。
(这不太可能是你的情况,但如果你试图根据视图引用一堆“无键”实体,那么值得一试)