Domanda

ho incontrato un'eccezione quando uso Entity Framework 4.0 RC. Il mio modello Entity Framework è incapsulato in un assembly privato il cui nome è Procurement.EFDataProvider e le mie classi POCO sono all'interno di un altro Procurement.Core assemblaggio Il rapporto tra core (Business Logic) e EFDataProvider (Data Access) è con una fabbrica di nome DataProvider

in modo che quando cerco di creare un ObjectSet

objectSet = ObjectContext.CreateObjectSet<TEntity>();

ottengo un errore:

  

Mappatura e le informazioni dei metadati non sono stati trovati per EntityType 'Procurement.Core.Entities.OrganizationChart'.

È stato utile?

Soluzione

Per chiunque altro che fare con l'errore, penso che vale la pena ricordare alcuni scenari che ho trovato che causano questo errore (estremamente scortese):

  • proprietà errate (maiuscole e minuscole!)
  • Proprietà mancanti nella classe POCO
  • disallineamenti Type tra POCO e tipo di entità (ad esempio, int anziché lungo)
  • Enums nel POCO (EF non supporta le enumerazioni in questo momento mi pare di capire)

Ci potrebbero essere altre cause pure.

HTH

Altri suggerimenti

Questo è probabilmente perché EF non riesce a trovare le informazioni di mapping incorporato. Dentro la stringa di connessione probabilmente avrete qualcosa come il suo:

metadata=res://*/Models.MyModels.csdl|...etc

Questo è un carattere jolly *, dicendo al contesto dell'oggetto per cercare di trovare le informazioni di mapping incorporato da, credo, la scansione di tutti gli assembly caricati. Se l'assemblea non viene caricato, EF non lo troverete.

Quello che dovete fare è fornire la stringa di connessione con più informazioni su dove le informazioni di mappatura è incorporato. Modificare il * al nome assembly specifico del codice di mappatura:

metadata=res://Procurement.EFDataProvider/Models.MyModels.csdl

Se non funziona, trovare l'Assemblea e direttamente caricarlo nel vostro ObjectContext utilizzando:

ObjectContext.Metadataworkspace.LoadFromAssembly();

Non direttamente connessi a quanto sopra, ma se si ottiene questo messaggio di errore e aver mescolato un POCO e un modello regolare:! Cattiva idea

Si veda anche il commento da JRoppert all'indirizzo EF4 POCO (se non utilizzano T4): (! grazie JRoppert) Mappatura e informazioni sui metadati non sono stati trovati per EntityType

mi è stato sempre questo errore perché ho avuto più di file di edmx nello stesso assembly con l'utilizzo corretto di spazi dei nomi personalizzati.

Ecco ciò che viene detto di fare un'eccezione in System.Data.Objects.ObjectContext

// Eccezioni:

    //   System.InvalidOperationException:
    //     When the System.Data.Metadata.Edm.EntitySet from entitySetName
    //     does not match the System.Data.Metadata.Edm.EntitySet of the object’s
    //     System.Data.EntityKey.
    // -or-
    //     When the System.Data.Objects.ObjectContext.DefaultContainerName
    //     property is not set on the System.Data.Objects.ObjectContext and 
    //     the name is not qualified as part of the entitySetName parameter.
    // -or-
    //     When the specified type belongs to more than one entity set.

Ho anche visto che quando la stringa di connessione non è specificato nel file di configurazione.

Un altro problema è possibile, se si utilizza il codice-first e il tipo di entità è definito in un assembly separato al punto in cui il contesto è definire e non avete aggiunto degli mappature personalizzate per il metodo OnModelCreating(DbModelBuild modelBuilder), poi EF sembra ignorare le annotazioni di dati.

Soluzione:

Aggiungi modelBuilder.Entity<YourEntityType>(); al metodo OnModelCreating(DbModelBuild modelBuilder).

post correlati .

Basta controllare l'ortografia di proprietà con il modello

Ci potrebbe essere un altro motivo. Ho anche tirato i capelli per una notte.

ho girato che c'è qualche disturbo nei riferimenti nella soluzione. Nel mio progetto, il edmx appartiene ad un progetto chiamato DataAccess.Dll. Ma non ho alcun riferimento ad esso dal mio exe. Dal mio exe ho un riferimento a un altro progetto chiamato Business.Dll, e questo progetto ha un punto di riferimento per la posizione e per il vecchio DataAccess.DLL.

Effettuare la seguente prova per vedere se si dispone di tale problema:

  1. Aprire il direttore bin del progetto exe e tenerlo visibile.
  2. Creare la soluzione.
  3. Il primo progetto che sarà costruito è il progetto di accesso ai dati, e si può vedere nella cartella bin l'ora attuale come la sua data di modifica.
  4. Mentre altri progetti sono costruiti, si vedrà che la data di modifica del progetto DataAccess è stato cambiato in un vecchio.

È necessario controllare i riferimenti e per assicurare che si riferiscono ai percorsi di aggiornamento delle vostre DLL.

Nel mio caso è stato essentialy lo stesso problema, la mappatura non essere esattamente come previsto. Quello che è successo a me era che avevo spostare una proprietà in una "tabella per gerarchia di ereditarietà" da una delle sottoclassi alla classe base e dimenticato di aggiornare il modello.

Ho personalizzati POCO e copiando il file edmx ad un nuovo progetto vuoto e lasciare autogenerate le entità, poi li confronta con quello che mi aveva aiutato a trovare la differenza.

un errore niubbo, ma ho avuto l'errore quando il mio accesso al DB era con un sola lettura nome utente e password. Spero che i miei errori aiutare gli altri.

Ho avuto un problema simile. Ho già avuto un file EDMX per un database utilizzando le classi POCO e un oggetto Context io ho scritto. Quando ho aggiunto un secondo EDMX per un database diverso ho usato il modello POCO T4 e allora né EDMX lavorato e buttato l'errore lei ha citato. Per risolverlo ho scartato mia abitudine POCO e Contesto e usato solo il modello T4 e tutto ha funzionato bene di nuovo.

Ho avuto un problema in cui avevo aggiunto alcune colonne di una tabella.

In Mapping Table, avevo ribattezzato i nomi delle colonne.

Anche se avevo correre 'Transform Tutti i Modelli' e ricostruito l'applicazione, ho ancora avuto il 'Il tipo di metadati associati per il tipo <> contiene le seguenti proprietà sconosciute o campi <>' errore.

La classe di questo tavolo in Domain.Poco.tt era corretta, ma ho trovato il file corrispondente class.Metadata.cs Domain.Poco.MetaData.tt non era aggiornato, e aveva le nuove colonne con i nomi originali - non quelli nuovi che avevo indicato nella tabella Mapping.

Soluzione? Ho appena cancellato la classe di metadati incriminato, e ri-ran 'Transform Tutti i Modelli' ed è stato ricreato in modo corretto, con i nomi corretti di colonna / funzione.

Il mio problema era che avevo modificato il modello T4 escludere il settore replica denominato "msrepl_tran_version". Questo ha causato il database per non corrisponde alle classi generate che possono causa questo messaggio di errore. Basta assicurarsi che il database e le classi partita.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top