Я не уверен насчет ядра EF и EF, но мы абстрагируем DbContext в функциональные блоки c 'logi c'.
Например:
class DbContext()
{
public DbSet<PeopleEntity> peoples;
}
class PeopleLogic()
{
DbContext _context;
PeopleLogic(DbContext context)
{
_context = context;
}
IEnumerable GetAllPeoples()
{
// create context,
// apply filters
// return result
}
}
У нас, конечно, есть база для простых операций CRUD;
public void AddOrUpdate(){
lock (SyncDatabaseWriteObject)
{
try
{
using (var context = CreateContext())
{
//insert the entity and add it to the db context
context.Set<TEntity>().AddOrUpdate((TEntity)entity);
context.SaveChanges();
}
return entity;
}
catch (Exception ex)
{
throw new DatabaseAccessException("Error occured while getting saving.", ex);
}
}
}
И вместо передачи контекста db, мы обходим вокруг логики.
например, мы разделяем логики c для базы данных и доступ к базе данных на 2 отдельных проекта, тогда бизнес-уровень использует только уровень dbAccess.