Мне удалось реализовать небольшую классную единицу работы для работы с фреймворком сущностей.
Я придумал ..
public class UnitOfWork : IUnitOfWork
{
private Database _database;
private IDatabaseFactory _databaseFactory;
private DbTransaction transaction;
public UnitOfWork(IDatabaseFactory databaseFactory)
{
_databaseFactory = databaseFactory;
_database = Database;
transaction = _database.Database.Connection.BeginTransaction();
}
public Database Database
{
get { return _database ?? (_database = _databaseFactory.Get()); }
}
public void Dispose()
{
try
{
_database.SaveChanges();
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
}
}
}
Я почти уверен, что сейчас все завидуют этой единице работы. (Шучу)
Но у меня есть небольшая проблема с дизайном на этом уровне обслуживания.
public class JournalService : IJournalService
{
IJournalRepository _journalRepository;
public JournalService(IJournalRepository journalRepository)
{
_journalRepository = journalRepository;
}
public void AjouterJournal(Journal j)
{
[B]using (IUnitOfWork uow = new UnitOfWork())[/B]
{
var journal = new Journal();
journalRepository.AddJournal(journal);
}
}
}
Проблема в том, что единице работы требуется внедрение базы данных, поэтому я не могу создать ее экземпляр. Я не могу предоставить единицу работы непосредственно на уровне сервиса, потому что это не имело бы смысла, поскольку единица работы должна быть одноразовой.
И поскольку я использую репозиторий для добавления своих материалов, нет необходимости в доступе к единице работы работают напрямую, сохранение будет происходить автоматически, когда оно все равно будет удалено.
Я мог бы внедрить IDatabaseFactory в свой уровень обслуживания, но идея состоит в том, чтобы не использовать его там. На самом деле уровень сервиса не должен об этом знать.
Как насчет фабрики UnitOfWork?
Есть идеи или предложения, как я могу это исправить?
Спасибо.