我试图先学习代码EF6,我对dbcontext感到困惑。
数据库i将使用800个以上的表,而在应用程序的特定部分时,我只处理1-10个表。
所以我的问题是;涉及800多个课程的DBContext不会对系统资源产生重大负面影响?
我想我是这项技术的新手,并且对我在研究过程中所接受的信息的实际含义感到困惑。
谢谢。
注意:谢谢您的输入。请查看这篇文章:使用带有通用存储库和工作单位的多个DBContexts。它说我不能在彼此相关的单独上下文中有表格?!
但是,在现实世界中,我的理解是,在集中领域中分解桌面关系是很常见的,这是如何在代码第一ef中完成的?再次感谢。
更新
如果您使用的是存储库模式,则不能进行多个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代码优先,则根据需要的数量,但不再使用它来设计POCO
类。但是,根据您对800
表的评价,我认为您可能想尝试使用Database-First
方法。我建议您非常谨慎地说明您所需的一切。
更新:
如果您是从数据库 - 最初接触到的: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());
}
}
您只需在DbContext
中添加新的DbSet<Class>
,就如下所示:
public DbSet<POCO CLASS> CLASS { get; set; }
等等,我通常会为我在MVC应用程序中的每个Area
创建一个DbContext
。因此,您可以像Admin Area
-> AdminDbContext
一样去。
您只需要在数据库上下文中使用的表(如果DB已经存在)。您需要所有表格的DB上下文的唯一原因是,如果您想从头开始重新创建整个DB。
从DDD:http://martinfowler.com/bliki/boundedcontext.html
查看有限的上下文模式。