2016-12-30 520 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 –