更新
如果您使用存储库模式,则不能创建多个 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();
}
}
您也应该在其中包含您的 DbSet。
如果您正在执行 EF Code-First,那么您可以根据需要的数量来设计 POCO 类,但仅此而已。但根据您对800 表的看法,我认为您可能更想尝试Database-First 方法。我建议你这个article 非常仔细,因为它解释了你需要的一切。
更新:
如果您从数据库优先处理此问题:Ado.NET Entity Model 为您创建 DbContext!如果您仔细查看 .Edmx 文件,它基本上就是您的 POCO 类。
现在,如果您尝试代码优先方法,假设您有这个 DbContext 类:
public class MyDbContext : DbContext
{
public MyDbContext()
: base("name=MyConnection")
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, YourApplication.Migrations.Configuration>("MyConnection"));
}
//Every time you need to add new Table you add them here.
public DbSet<Users> Users { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//And Map them here
modelBuilder.Configurations.Add(new UsersMap());
}
}
您只需将新的DbSet<Class> 添加到您的DbContext,如下所示:
public DbSet<POCO CLASS> CLASS { get; set; }
等等,我通常为我在 MVC 应用程序中的每个 Area 创建一个 DbContext。所以你可以像Admin Area -> AdminDbContext 等等。