C#实体框架DBContext



我试图先学习代码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

查看有限的上下文模式。

相关内容

最新更新