2012-09-24 14 views
5

Estoy intentando actualizar mi repositorio a EF5 pero he encontrado algunos errores. He echado un vistazo alrededor de stackoverflow por errores similares descubrí algunas preguntas/respuestas, pero desafortunadamente las mismas respuestas no resolvieron mi problema.El tipo de entidad no es parte del modelo, EF 5

Esta es mi error:

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. 

Ésta es mi clase DbContext:

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

Esta es mi clase de contexto que herede mi clase WebModelContext:

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

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

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

Este es mi clase de repositorio:

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

} 

Ésta es mi clase AccountRepository:

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

Cualquier ayuda muy apreciada :)

Respuesta

6

EF no puede ser capaz de recoger los tipos de entidad que ha declarado. Reemplace el OnModelCreating y agregue la entidad User al modelo.

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

Gracias por la ayuda, he intentado hacer esto justo ahora y encuentro el mismo error. Originalmente agregué su código, pero VS dijo que no reemplazaba a OnModelCreating de DbContext, por lo que reemplacé Virtual con override. Después de hacer eso, agregué un punto de interrupción a la línea 'modelBuilder.Entity ();' pero no llegó al punto de interrupción y aún dio el mismo error. –

+1

@SHTester Intente detener e iniciar servidor de desarrollo ASP.NET local/IIS – Eranga

+1

bien, aún así el mismo error, intentaré reiniciar la máquina. –

3

he tenido el mismo problema con EF 5 ... Lo que he hecho era eliminar todos los archivos creados por archivos tt y volver a crearlos de nuevo ... todo estaba funcionando de nuevo!

0

El nombre de su modelo de tabla es incorrecto. establece el nombre correcto cuando está en el servidor Sql. vista de retorno (db.tblEmployees.ToList()); línea de error .....

marcha del modelo y duble clic ur nombre del modelo de juego con el nombre de tabla como (tblEmployees)

su error es resolver

Cuestiones relacionadas