2011-04-07 49 views
6

任何人都可以提供任何建议是否最好的做法有一个单一的上下文或多个上下文?EF 4.1代码优先 - 单个上下文还是多个上下文?

例如,我应该有一个单一的背景如下:

public class MyContext 
     : DbContext 
    { 
     public DbSet<Company> Companies { get; set; } 

     public DbSet<Country> Countries { get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Configurations.Add(new CountryConfiguration()); 
      modelBuilder.Configurations.Add(new CompanyConfiguration()); 
      base.OnModelCreating(modelBuilder); 
     } 
    } 

或者,我会更好,创造企业和国家独立的语境?所以ConpanyContext和CountryContext会暴露一个DbSet属性。

这可能只是个人选择,但我们的数据库将包含100个实体。因此,我想首先得到这个权利。

非常感谢,

保罗。

回答

6

一个简单的经验法则:一个架构/域,一个上下文。

+0

我想这样做,如果表现良好。我有点担心,当它需要处理OnModelCreating中的100多个配置类时,会如何创建上下文的实例。通过在WCF服务中使用它,这将成为更多的问题,因此它将在每个服务调用中创建一个新实例。 – P2l 2011-04-08 09:12:03

+0

@Paul:OnModelCreating被称为** ONCE **,不是每次创建实例。 – 2011-04-08 11:07:07

+0

刚刚经过测试,你是对的。那么就是一个背景。 – P2l 2011-04-08 12:07:00

2

如果可能,请尝试将它们沿着有意义的线条拆分。

上下文中的100个实体可能看起来很糟糕,但考虑一下您的替代方案,100个不同的上下文?

然后你不得不做的事情一样

using(CompanyContext cc = new CompanyContext) 
{ 
} 

using (CountryContext cc = new CountryContext) 
{ 
} 

如果你需要查询你有嵌套上下文多个表,它会变得丑陋。 你会开始有类似的事情

using(CompanyContext comp = new CompanyContext) 
    { 
     using (CountryContext country = new CountryContext) 
     { 
     } 
    } 

我无法想象表现会走回头路得到改善,但我敢肯定,维修将是一个痛苦。