2012-09-24 6 views
5

Ich versuche, mein Repository auf EF5 zu aktualisieren, habe aber einige Fehler festgestellt. Ich habe mich in stackoverflow nach ähnlichen Fehlern umgesehen, ein paar Fragen/Antworten gefunden, aber leider haben die gleichen Antworten mein Problem nicht gelöst.Der Entitätstyp ist nicht Teil des Modells, EF 5

Das ist mein Fehler:

The entity type User is not part of the model for the current context. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Das ist meine DbContext Klasse ist:

public abstract class WebModelContext : DbContext 
{ 
    public WebModelContext() 
     : base("WebConnection") 
    { 
     Configuration.LazyLoadingEnabled = true; 
    } 
} 

Das ist meine Kontextklasse ist, dass meine WebModelContext Klasse erbt:

public class AccountContext : WebModelContext 
{ 
    private DbSet<User> _users; 

    public AccountContext() 
     : base() 
    { 
     _users = Set<User>(); 
    } 

    public DbSet<User> Users 
    { 
     get { return _users; } 
    } 
} 

Das ist mein Repository-Klasse:

public abstract class IRepository<T> : IDisposable where T : WebModelContext, new() 
{ 
    private T _context; 

    protected T Context 
    { 
     get { return _context; } 
    } 

    public IRepository() { 
     _context = new T(); 
    } 

    public void Dispose() 
    { 
     Dispose(true); 
     GC.SuppressFinalize(this); 
    } 

    ~IRepository() 
    { 
     Dispose(false); 
    } 

    protected virtual void Dispose(bool disposing) 
    { 
     if (disposing) 
     { 
      if (_context != null) 
      { 
       _context.Dispose(); 
       _context = null; 
      } 
     } 
    } 

} 

Das ist meine AccountRepository Klasse:

public class AccountRepository : IRepository<AccountContext> 
{ 
    public List<User> GetUsers() 
    { 
     return Context.Users.ToList(); 
    } 

    public User GetUser(string username) 
    { 
     return Context.Users.Where(u => u.Name == username).FirstOrDefault(); 
    } 

    public User CreateUser(string username, string password, string salt, int age, int residence) 
    { 
     User user = new User 
     { 
      Name = username, 
      Password = password, 
      Salt = salt, 
      RoleId = 1, 
      CreatedOn = DateTime.Now, 
      Locked = false, 
      Muted = false, 
      Banned = false, 
      Guid = Guid.NewGuid().ToString("N") 
     }; 
     Context.Users.Add(user); 
     return Context.SaveChanges() > 0 ? user : null; 
    } 
} 

Jede Hilfe sehr geschätzt :)

Antwort

6

EF möglicherweise nicht die Entitätstypen abholen Lage, Sie erklärt haben. Überschreiben Sie die OnModelCreating und fügen Sie die User Entität zum Modell hinzu.

public class AccountContext : WebModelContext 
{ 
    private DbSet<User> _users; 

    public AccountContext() 
     : base() 
    { 
     _users = Set<User>(); 
    } 

    public DbSet<User> Users 
    { 
     get { return _users; } 
    } 

    protected virtual void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<User>(); 
    } 
} 
+0

Danke für die Hilfe zu lösen, habe ich versucht zu tun das gerade jetzt und ich stoße auf denselben Fehler. Ich habe ursprünglich Ihren Code hinzugefügt, aber VS hat gesagt, dass das OnModelCreating nicht von DbContext überschrieben wurde, also habe ich virtual durch override ersetzt. Nachdem ich das getan habe, habe ich einen Breakpoint zur Zeile 'modelBuilder.Entity ();' hinzugefügt, aber es hat den Haltepunkt nicht erreicht und immer noch denselben Fehler ausgegeben. –

+1

@SHTester Versuchen Sie, lokalen ASP.NET Development Server/IIS zu stoppen und zu starten – Eranga

+1

okay, habe getan, immer noch den gleichen Fehler, ich werde versuchen, den Rechner neu zu starten. –

3

Ich habe das gleiche Problem mit EF 5 hatte ... Was Ive alle Dateien fertig war von tt-Dateien erstellt zu löschen und neu zu erstellen, sie wieder ... alles wieder funktioniert!

0

Der Name Ihres Tabellenmodells ist falsch. Stellen Sie den korrekten Namen ein, wenn Sie auf dem Sql Server sind. return View (db.tblEmployees.ToList()); Fehlerzeile .....

go-Modell und duble ur Modellnamen klicken als mit Tabellennamen passend wie (tblPersonal)

Ihr Fehler ist