Тип объекта не является частью модели, EF 5

Я пытаюсь обновить свой репозиторий до EF5, но обнаружил несколько ошибок. Я просмотрел stackoverflow на предмет похожих ошибок, обнаружил несколько вопросов/ответов, но, к сожалению, те же ответы не решили мою проблему.

Это моя ошибка:

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.

Это мой класс DbContext:

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

Это мой класс контекста, который наследует мой класс WebModelContext:

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

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

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

Это мой класс репозитория:

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

}

Это мой класс 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;
    }
}

Любая помощь очень ценится :)


person Michael    schedule 24.09.2012    source источник


Ответы (3)


EF может быть не в состоянии подобрать объявленные вами типы сущностей. Переопределите OnModelCreating и добавьте объект User в модель.

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>();
    }
}
person Eranga    schedule 24.09.2012
comment
Спасибо за помощь, я только что попробовал это сделать и столкнулся с той же ошибкой. Первоначально я добавил ваш код, но VS сказал, что он не переопределяет OnModelCreating из DbContext, поэтому я заменил виртуальный на переопределение. После этого я добавил точку останова в строку modelBuilder.Entity<User>();, но она не достигла точки останова и по-прежнему выдавала ту же ошибку. - person Michael; 24.09.2012
comment
@SHTester Попробуйте остановить и запустить локальный сервер разработки ASP.NET/IIS. - person Eranga; 24.09.2012
comment
хорошо сделал, все та же ошибка, я попробую перезагрузить машину. - person Michael; 24.09.2012
comment
Удивительно! Это действительно должно помочь. Где-то висит еще один класс User? - person Gert Arnold; 25.09.2012
comment
Привет, Эранга! Что может быть причиной того, что EF не может подобрать объявленные вами типы сущностей? Я думал, что наличие свойства DbSet должно добавлять сущность в модель... - person Prokurors; 10.06.2015

У меня была такая же проблема с EF 5... Что я сделал, так это удалил все файлы, созданные файлами tt, и воссоздал их снова... все снова заработало!

person Gabriel    schedule 08.10.2012

У вас неправильное название модели стола. установите правильное имя при переходе на сервер Sql. вернуть представление (db.tblEmployees.ToList()); строка ошибки.....

перейти к модели и дважды щелкнуть имя модели ur, чем совпадать с именем таблицы, например (tblEmployees)

твоя ошибка решена

person Ajay sharma    schedule 07.08.2015