我已经能够实现一个很酷的工作单元来使用实体框架。
我想出了..
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 工厂怎么样?
关于如何解决这个问题的任何想法或建议?
谢谢。