Я начал смотреть на Entity Framework для проекта, который я делаю, и иду по пути использования BLL против него через шаблон репозитория. Насколько я понимаю, для каждого объекта я должен создать для него репозиторий, чтобы у меня было
public class UserRepository : IRepository<User>
{ ... }
и
public class AccountRepository : IRepository<Account>
{ ... }
В примерах, которые я видел, обычной практикой является создание контекста сущностей в операторе using и выполнение операций получения, обновления, сохранения и т. д. внутри.
using(var ctx = new AppEntities()
{
//do whatever
ctx.SaveChanges();
}
Для простого доступа к репозиторию это было бы нормально, но что, если бы я хотел создать взаимодействие между двумя (или более) репозиториями внутри с помощью BLL...
public void SaveSomethingMoreComplex()
{
//BLL here stuff like validation etc
_userRepository.GetSomeData();
_accountRepository.SaveSomeData(account);
_userRepository.SaveSomeMore(user);
// Probably should have one final save that affects both repositories???
// Should be in a transaction scope also?
}
Было бы лучше использовать один и тот же экземпляр AppEntities
для обоих репозиториев?
Кроме того, в этом примере окончательное сохранение, вероятно, должно быть в конце блока, а не иметь 2, как в моем примере, и часть транзакции?
Если я использую один и тот же экземпляр, то безопасно ли вводить его в конструктор репозиториев и поддерживать его в течение всего срока службы приложения, или есть ли какая-то причина, по которой примеры, которые я видел, имеют тенденцию создавать и удалять в пределах одного вызова метода ?
Спасибо за любую оказанную помощь.