Sto lavorando a un'applicazione che utilizza Entity Framework per interrogare un database da un'applicazione di terze parti. Il database ha un numero elevato di tabelle e nessuna chiave esterna. Ho mappato le tabelle pertinenti alle entità utilizzando l'API Fluent Framework di Entity.
namespace App.Entities
{
public class Ticket
{
public int Id { get; set; }
public virtual SalesOrder SalesOrder { get; set; }
public int SalesOrderId { get; set; }
}
public class SalesOrder
{
public int Id { get; set; }
public virtual ICollection<Ticket> Tickets { get; set; }
public virtual ICollection<Ticket> Lines { get; set; }
}
}
Si noti che i mapping dei nomi di colonne e tabelle sono omessi poiché non penso che siano rilevanti.
namespace App.Mappings
{
public class TicketMap : EntityTypeConfiguration<Ticket>
{
public TicketMap() {}
}
public class SalesOrderMap : EntityTypeConfiguration<SalesOrder>
{
public SalesOrderMap()
{
HasMany(t => t.Tickets)
.WithRequired(t => t.SalesOrder)
.HasForeignKey(t => t.SalesOrderId);
HasMany(t => t.Lines)
.WithRequired(t => t.SalesOrder)
.HasForeignKey(t => t.SalesOrderId);
}
}
}
Le entità e le loro associazioni sono correttamente registrate con Entity Framework.
Sto ricevendo la seguente MetadataException
quando provo a eseguire una query:
Lo schema specificato non è valido. Errori: la relazione "App.SalesOrder_Tickets" non è stata caricata perché il tipo "App.Ticket" non è disponibile.
Si noti che lo spazio dei nomi di Ticket
mostrato nel messaggio precedente è errato. La classe entità è in realtà in App.Entities.Ticket
. Tuttavia, non so se questo è collegato al problema o no.
Il problema era questa coppia di linee:
public virtual ICollection<Ticket> Tickets { get; set; }
public virtual ICollection<Ticket> Lines { get; set; }
Il tipo di elemento della seconda collezione doveva essere diverso da quello del primo:
public virtual ICollection<TicketLine> Lines { get; set; }
Cambiando questo risolto il problema.
Ho avuto lo stesso messaggio di errore e il problema per me era che avevo due diversi modelli edmx con entità con lo stesso nome. Immagino che EF non possa caricare alcune delle entità correlate e stia dando un messaggio.
Ho risolto l'eliminazione di entità da un modello (cambiando nome avrebbe funzionato anche io credo) e ricostruendo la soluzione.