实体框架无效的列名称,EF将数字1添加到主键

时间:2013-02-16 22:29:19

标签: entity-framework entity-framework-4 entity-framework-5

我有这两个实体:

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"));

但问题仍然存在。我该如何解决这个问题?

5 个答案:

答案 0 :(得分:9)

我收到了与非外键列相关的错误,浪费了太多时间试图找出错误。它在我的代码中,而不是在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。无论我看了多久,我都看不出自己的错误。运气好的话,这会挽救其他一些可怜的灵魂。

答案 1 :(得分:5)

尝试添加多对一映射。请使用纯Fluent API,您应该删除[ForeignKey]注释。

modelBuilder.Entity<Publicacion>()
            .HasRequired(x => x.Suscriptores)
            .WithMany(x => x.Publicacion);

答案 2 :(得分:2)

我在我刚刚添加的属性(列)的Item表中遇到了这个问题,多么令人沮丧!

原来我在Order的数据模型中有一个List属性,因为我没有在该配置中忽略它,它会在Item表中引起同样的问题。除非两个表都具有相同名称的属性,否则不会发生这种情况,因此我必须这样做......无论如何我都应该这样做。

public OrderConfiguration() { Ignore(p => p.Items); }

答案 3 :(得分:0)

您好,我有一个旧代码, 具有相同外键名称的两个类。 在正确的列上添加Annotation引用,在其他类中添加具有相同名称的属性名称。然后,Anonymous 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; }
}

答案 4 :(得分:0)

我收到相同的错误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,这是数据库中的字段名称-但这是不正确的。