2016-12-30 128 views
4

我想学习Code First EF6和我很困惑DBContext。C#实体框架DBContext

我将要处理的数据库包含800多个表格,而在应用程序的特定部分工作时,我只处理1-10个表格。

所以我的问题是,不会有涉及800多个类的DBContext对系统资源有很大的负面影响?

我想我对这项技术很陌生,对于我在研究过程中得到的信息的实际含义感到困惑。

谢谢。

注意:感谢您的输入。请看看这个帖子:Using multiple DbContexts with a generic repository and unit of work。在那里,它表明我不能在单独的上下文中相互关联的表?

但是在现实世界中,我的理解是,在关注区域中拆分表关系很常见,这是如何在Code First EF中完成的?再次感谢。

+0

只需使用DB第一种方式,并导入了所需的实体。 – Ric

+1

你不想要800+表格对象的一个​​模型。你可以有多个dbcontext模型。你可以创建一个模型来处理工作人员,另一个模型可以处理课程,或者你的项目处理的其他任何领域 – JamieD77

+0

已更新我的回答 – Valkyrie

回答

1

更新

如果使用存储库模式,你不能去进行多次的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代码优先那么它你根据需要多少,但没有更多的设计您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等等。

+0

我发现令人困惑的是;我们有一个容器应用程序,里面有很多组件(客户/工作人员记录,课程,商业日历,高尔夫......),所以我如何从这个角度开发应用程序,即我们是否不断向DBContext添加新的类随着我们的需求增长?谢谢。 – Guygar

+0

@Guygar让我给你和例子。检查回来在afew分钟 – Valkyrie

2

您只需要在db上下文中使用的表(如果db已经存在)。如果你想从头开始重新创建整个数据库,那么你需要所有表的db上下文的唯一原因是。

看看从DDD有界的背景模式:http://martinfowler.com/bliki/BoundedContext.html

+0

伟大的联系!重点关注我的问题。您能否指点我在​​Code-First实体框架环境中实施的正确方向?谢谢。 – Guygar

+0

https://msdn.microsoft.com/en-us/magazine/jj883952.aspx?f=255&MSPPError=-2147217396 –

+0

https://msdn.microsoft.com/zh-cn/magazine/dn802601.aspx –