Domanda EF 4.1 Codice Primo errore - Il tipo di entità SomeType non fa parte del modello per il contesto corrente


Mentre lavoro con il codice EF prima ricevo l'errore indicato di seguito in momenti diversi:

Il tipo di entità SomeType non fa parte del modello per il contesto corrente.

Quali sono le possibili cause di questo errore?


43
2018-04-12 11:25


origine


risposte:


Può verificarsi perché:

  • DbContext configurato con una stringa di connessione errata
  • L'entità specificata in realtà non è mappata nella configurazione

41
2018-04-12 11:50



Ho capito quando la mia classe ereditata da DbContext non ha dichiarato il modello come una proprietà. Ad esempio, ho trascurato di aggiungere una proprietà per FooModel nel seguente codice:

public class MyDBContext : DbContext
{
    public DbSet<FooModel> FooModels{ get; set; }

    // etc. ... 
}

14
2017-11-23 18:46



Questo messaggio appare anche se si tenta di fare qualcosa come un EntityState su una collezione figlio in una associazione uno-a-molti.

Per esempio; se esiste un'associazione uno a molti tra ParentEnt e ChildEnt nello snippet di codice seguente, viene visualizzato il messaggio di errore:

Il tipo di entità Hash1Type non fa parte del modello per il contesto attuale.

MyDbContext.Entry(ParentEnt.ChildEnt).State = EntityState.Unchanged;

La seguente modifica non produce un errore:

MyDbContext.Entry(ParentEnd.ChildEnt.First).State = EntityState.Unchanged;

Si noti che l'uso di First() in questo caso può indicare t


5
2017-08-24 13:14



Ciò può anche essere causato da proprietà sul POCO non denominate ESATTAMENTE come sono nel EDMX / modelbuilder. Si prega di consultare il mio post qui per i dettagli su come ho avuto difficoltà a risolvere il problema.

Il tipo di entità <class> non fa parte del modello per il contesto corrente


1
2017-12-14 13:16



Ho avuto questo errore.

Si è scoperto che avevo aggiunto un nuovo campo a un db View poche ore prima. Ho aggiornato il contesto (come parte di qualcos'altro che stavo facendo) e ho ricevuto questo errore.

Quando ho aggiornato i POCO tutto andava bene: EF ha lanciato questo errore perché non poteva mappare un campo nella Vista su una proprietà nel POCO della Vista.

Non è il messaggio di errore più utile in questa situazione. IMO.


1
2017-07-03 12:32



Può accadere quando il tuo modello non è mappato correttamente alla tua Classe. Nel mio caso ho ricevuto questo errore quando ho utilizzato EF Model First e quando ho aggiornato il mio modello EDMX da DB ma non ho aggiornato la mia classe Entity. Nello specifico una proprietà in Entity era in minuscolo mentre in DB e in EDMX il diagramma era in maiuscolo. E un altro problema che avevo era una proprietà del modello nel diagramma EDMX non è stata convertita alla mia app Enum in modo che EF non potesse riconoscere quell'entità.


1
2018-01-28 02:01



Ho fatto prima il database e ho utilizzato la generazione di modelli incorporata per i miei modelli (EF 4.1)

Ho copiato il codice generato in un nuovo file e rimosso le proprietà di navigazione. Questo è quando ho iniziato a vedere questo errore. Ho il caricamento pigro disattivato, ma sembra che le proprietà di navigazione siano ancora necessarie nei POCO.

Suppongo che l'errore potrebbe indicare che al tuo modello manca qualcosa.

namespace TestApp.BLL
{
    using System;
    using System.Collections.Generic;

    public partial class User
    {
        public User()
        {
            //this.Roles = new HashSet<Role>();
        }

        public int UserId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }

        //public virtual ICollection<Role> Roles { get; set; }
    }
}

Il codice sopra mostra le proprietà di navigazione commentate. Se li scompiglio su tutti i POCO (che significa anche il ruolo POCO) l'eccezione scompare.


0
2018-04-14 16:53



AGGIORNARE

Questo errore continuava ad attaccarmi con vari aggiornamenti apportati al database. Alla fine ho cancellato il file edmx e l'ho appena creato di nuovo con le stesse tabelle e i proc memorizzati.

Vecchio

Ho capito quando all'entità generata mancava una colonna nullable:

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace MyProgram.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Question
    {
        public int id { get; set; }
        public string title { get; set; }
        public string body { get; set; }
        public string tags { get; set; }
        public int votes { get; set; }//I had to manually add this property which is nullable int in the database
    }
}

Ho aggiunto la proprietà dopo aver generato il modello iniziale. Tuttavia, ho anche provato a cancellare il tavolo e ricrearlo. Questo non l'ha risolto Aggiungendo manualmente la proprietà, l'ho solo aggiustata per me.


0
2018-04-01 15:05



Rispondere alla domanda è "Quali sono le possibili cause di questo errore?":

Questo errore sembra verificarsi ogni volta che il modello interno / EDMX non è stato creato correttamente o non è stato completamente creato. E c'è un grande numero potenziale di cause per questo problema. È spiacevole che non ci siano segnalazioni di errori insufficienti o il rilevamento di errori durante la costruzione del modello, quindi risolverlo sembra implicare il provare un sacco di cose per vedere che cosa fa andare via il problema.

Mi sono imbattuto in un'altra istanza di questo errore negli ultimi giorni, usando EF 6.0 (attualmente codice pre-rilascio), code-first e convenzioni personalizzate. Si scopre che la causa principale è che avevo una convenzione personalizzata che rinomina l'ID EdmProperty (es. ID -> MyTypeId). Se disabilitato la mia convenzione personalizzata questo problema è andato via; se ho abilitato la mia convenzione il problema si verifica. Non vi sono registrazioni o eccezioni o altri errori per indicare che si è verificato un problema durante la costruzione del modello. Questa eccezione non fa girare la testa fino a quando non provo ad aggiungere un'entità a un DbSet. La convenzione non ha causato alcun problema durante la generazione del database (tramite Migrazioni).


0
2017-08-14 16:34



Nel mio scenario stavo usando EF6 per migrare un database MySQL in MSSQL. Ho avuto 2 modelli e contesti separati, ognuno con la propria stringa di connessione. Le classi avevano lo stesso nome, ma quello MySQL era tutto in minuscolo e quello MSSQL in Pascal. Ho copiato entrambe le stringhe di connessione dagli assembly rilevanti che contengono i miei modelli EDMX. Ma quando ho eseguito la mia applicazione ho avuto un errore su una delle 2 stringhe di connessione che sono state già aggiunte all'elenco del dizionario.

Così ho rimosso la voce in conflitto, pensando follemente di avere accesso alla stringa di connessione in app.config (è tardi!). Ma no, l'errore stava effettivamente accadendo perché entrambe le stringhe di connessione avevano lo stesso nome - una in lettere minuscole e una in cassa Pascal - cioè il tasto Dizionario ignora l'involucro. Così, quando ho rimosso MySQL, ho tentato di utilizzare la stringa di connessione MSSQL per i modelli BOTH. Quindi ho dovuto aggiungere, rinominare e impostare manualmente la stringa di connessione per il secondo modello nel codice.


0
2017-08-30 23:21