Я начал смотреть на Entity Framework для проекта, который я делаю, и иду по пути использования BLL против него через шаблон репозитория.Насколько я понимаю, для каждой сущности я должен создать для нее репозиторий, чтобы у меня были
public class UserRepository : IRepository<User>
{ ... }
и
public class AccountRepository : IRepository<Account>
{ ... }
С примерами, которые я видел, обычной практикой является созданиеконтекст сущностей в операторе using и выполнение операций получения, обновления и сохранения и т. д. в пределах.
using(var ctx = new AppEntities()
{
//do whatever
ctx.SaveChanges();
}
Для простого доступа к репозиторию это было бы хорошо, но что, если бы я хотел составить взаимодействие между 2 (илидалее) репозитории внутри 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, как в моем примере, и часть транзакции?
Если я использую тот же экземпляр, то безопасно ли вводить его в конструктор репозиториев и использовать егоза время существования приложения или по какой-то причине примеры, которые я видел, имеют тенденцию создавать и использовать в рамках одного вызова метода?
Спасибо за любую помощьпри условии.