6

ho questo due entityesEntity Framework Nome colonna non valido, EF aggiunge numer 1 di chiave primaria

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; } 
} 

quando si tenta di eseguire questa query:

public ActionResult DetailsVSTO(string Identificacion) 
    { 
     var SusQ = from s in db.Suscriptores 
        where s.Identificacion == Identificacion 
        select s; 

     return Json(SusQ.First(), JsonRequestBehavior.AllowGet); 
    } 

E gettare questo messaggio:

System.Data.SqlClient.SqlException: nome colonna non valido "Suscriptores_IdSuscriptor1"

Cercando di lve questo problema ho aggiungere questa fluente in DbContext

 modelBuilder.Entity<Suscriptores>() 
      .HasMany(x => x.Publicacion) 
      .WithRequired(x => x.Suscriptores) 
      .Map(a => a.MapKey("IdSuscriptor")); 

Ma il problema persiste. Come posso fare per risolvere questo.

+2

Solo per curiosità, non dovrebbe essere questo un'associazione molti-pressi di molte? Non vorrei pubblicare qualcosa sapendo che posso ottenere solo un abbonato :) –

+0

riguardo al 3 ° oggi Gert. Mi piacciono i tuoi post :-) –

+0

Tks Gert per il tuo "commento", in realtà sono più nuovo con EF, solo un po 'di esperienza con esso.Ci sono molte "Pubblicazioni" per ciascuno "Suscriptores" e uno "Suscriptores" per ciascuna "Publications". È questo che voglio modellare. –

risposta

4

Prova anche a aggiungere un mapping molti-a-uno. Utilizzare la pura API Fluent e rimuovere le annotazioni [ForeignKey].

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

Tks, sto cercando ora –

+0

qualsiasi feedback Juan? –

7

ho ricevuto questo errore in relazione ad una colonna chiave non estera e sprecato troppo tempo a cercare di capire l'errore. Era nel mio codice, non in EF o nel database. Avevo semplicemente pensato che avevo digitato

this.Property(t => t.Revision).HasColumnName("Revision"); 
this.Property(t => t.DistributionClass).HasColumnName("DistributionClass"); 

Ma quello che avevo digitato ero

this.Property(t => t.Revision).HasColumnName("Revision"); 
this.Property(t => t.Revision).HasColumnName("DistributionClass"); 

Suppongo che stavo guardando la linea precedente e mettere t.Revision invece di t.DistributionClass. E non importa per quanto tempo l'ho guardato, non ho potuto vedere il mio errore. Con un po 'di fortuna questo salverà qualche altra povera anima qualche volta.

2

Ho avuto un problema simile in cui stavo ottenendo un'eccezione interna con il numero uno aggiunto al nome del campo. Vieni a scoprirlo, è stato perché avevo copiato e incollato e dimenticato di cambiare il nome della proprietà. Ad esempio:

Property(x => x.SomeProperty).HasColumnName("SomeProperty").IsOptional(); 
Property(x => x.SomeProperty).HasColumnName("SomeOtherProperty").IsOptional(); 

Avviso Avevo cambiato il nome della colonna tra virgolette ma avevo accidentalmente lasciato la stessa proprietà nel mio lambda. Questo è quello che mi ha morso. Speriamo che questo possa aiutare.

Property(x => x.SomeProperty).HasColumnName("SomeProperty").IsOptional(); 
Property(x => x.SomeOtherProperty).HasColumnName("SomeOtherProperty").IsOptional(); 

Questo ha risolto il problema.

0

Ho avuto questo problema nella mia tabella degli articoli su una proprietà (colonna) che avevo appena aggiunto e quanto è frustrante!

Si è verificato che ho avuto una proprietà List nel modello di dati per Order e poiché non l'ho ignorato in quella configurazione causa lo stesso problema nella tabella Item. Questo non sarebbe successo se non che entrambi i tavoli avevano una proprietà con lo stesso nome, quindi dovevo farlo ... che avrei dovuto fare comunque.

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

Problemi correlati