В моем проекте инъекция зависимости будет создавать экземпляр DomainContext (Entity Framework 6 DbContext
) для каждого запроса. Мне интересно, какой будет правильный курс действий, касающийся транзакций. Я знаю, что SaveChanges
будет использовать транзакцию внутри страны.Что такое явная транзакция базы данных в Entity Framework 6?
Должен ли я беспокоиться о возможных изменениях, которые остались в DomainContext
?
Я думал, что использование явных транзакций может оградить меня от этого дела, как в:
public class FooService : IFooService
{
private DomainContext db;
public FooService(DomainContext db)
{
this.db = db;
}
public void MergeEntities(Entity source, Entity target)
{
using (var uow = db.Database.BeginTransaction())
{
// merge source into target
db.SaveChanges();
uow.Commit();
}
}
}
Я не уверен, если я должен просто использовать это вместо того, чтобы он мог дать мне такую же защиту:
public class FooService : IFooService
{
private DomainContext db;
public FooService(DomainContext db)
{
this.db = db;
}
public void MergeEntities(Entity source, Entity target)
{
// merge source into target
db.SaveChanges();
}
}
Не знаю, правильно это или нет, но насколько я знаю, транзакции влияют только на состояние базы данных. Любые контекстные операции не ограничены транзакцией, поэтому, если вы завершаете слияние транзакции, вы все равно можете столкнуться с беспорядком, если операция слияния идет не так - в этом случае вы должны отказаться от контекста и начать заново. В этот момент ничто не попало в БД - работа выполняется в БД во время 'SaveChanges' – Charleh