实体类型不是模型的一部分,EF 5

时间:2012-09-24 07:56:59

标签: entity-framework dbcontext entity-framework-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;
    }
}

任何帮助都非常感谢:)

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

我遇到了与EF 5相同的问题......我所做的就是删除tt文件创建的所有文件,然后重新创建它们......每件事情都重新开始了!

答案 2 :(得分:0)

您的表型号名称错误。在Sql server中使用sates时设置正确的名称。 return View(db.tblEmployees.ToList()); 错误行.....

go Model and duble点击你的模型名称而不是像表名一样匹配(tblEmployees)

您的错误已解决