更新
如果您正在使用存储库模式,您不能创建多个DbContext,您需要创建一个通用的DbContext,并像下面这样将其传递给通用存储库:
public class Repository<T> : IRepository<T>
where T : EntityBase
{
internal MyDbContext context;
internal DbSet<T> dbSet;
public Repository()
{
context = new MyDbContext();
this.dbSet = context.Set<T>();
}
public void Add(T entity)
{
dbSet.Add(entity);
}
public void Delete(T entity)
{
dbSet.Remove(entity);
}
public void Delete(int id)
{
dbSet.Remove(dbSet.Find(id));
}
public T GetById(int id)
{
return dbSet.Find(id);
}
public IEnumerable<T> GetAll()
{
return dbSet.AsEnumerable();
}
public void Update(T entity)
{
dbSet.Attach(entity);
context.Entry(entity).State = EntityState.Modified;
}
public void Save()
{
context.SaveChanges();
}
}
而且你也应该在那里包含你的 DbSets。
如果您正在进行EF Code-First,则需要根据所需数量设计您的POCO类,但不要超过所需数量。但根据您对800个表的说法,我认为您可能想尝试Database-First方法。我建议您非常仔细地阅读此
article,因为它解释了您需要了解的一切。
更新:
如果您从DataBase-First的角度来看待这个问题:Ado.NET Entity Model会为您创建DbContext!如果您仔细查看.Edmx文件,它基本上就是您的POCO类。
现在,如果您尝试Code-First方法,假设您有这个DbContext类:
public class MyDbContext : DbContext
{
public MyDbContext()
: base("name=MyConnection")
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, YourApplication.Migrations.Configuration>("MyConnection"));
}
public DbSet<Users> Users { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new UsersMap());
}
}
您只需按照以下方式向您的
DbContext
添加一个新的
DbSet<Class>
即可:
public DbSet<POCO CLASS> CLASS { get; set; }
通常情况下,我会为MVC应用程序中的每个区域创建一个DbContext
。因此,您可以像这样进行操作:管理区域
-> AdminDbContext
等等。