更新
如果使用存儲庫模式,你不能去進行多次的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
等等。
只需使用DB第一種方式,並導入了所需的實體。 – Ric
你不想要800+表格對象的一個模型。你可以有多個dbcontext模型。你可以創建一個模型來處理工作人員,另一個模型可以處理課程,或者你的項目處理的其他任何領域 – JamieD77
已更新我的回答 – Valkyrie