Привет. Я пытаюсь использовать транзакции вместе с Entity Framework. Имея в Интернете так много информации о различных способах осуществления транзакций, я должен сказать, что я немного запутался в правильном пути. У меня есть пример базы данных с двумя таблицами Employee и Company. Таблица Employee имеет внешний ключ, относящийся к идентификатору компании. Учитывая, что я хочу реализовать транзакцию, в которой я вставляю запись в таблицу Company, а затем запись в таблицу Employee, и я хочу сделать это так, чтобы записи вставлялись, только если оба успешны, у меня есть следующий код.
public void addCompanyToDatabase()
{
using (var context = new myTestEntities())
{
context.Connection.Open(); //added this as was getting the underlying
//provider failed to open
using (TransactionScope scope = new TransactionScope())
{
try
{
Company c = new Company();
c.Name = "xyz";
context.Companies.AddObject(c);
context.SaveChanges();
//int a = 0;
//int b = 5 / a;
Employee e = new Employee();
e.Age = 15;
e.Name = "James";
e.CompanyId = c.Id;
context.Employees.AddObject(e);
context.SaveChanges();
scope.Complete();
}
catch (Exception ex)
{
Console.WriteLine("Exception Occurred");
}
}
}
}
Я хотел знать, был ли это правильный способ осуществления транзакций. Если это так, то зачем использовать функции SaveChanges(false)
и scope.AcceptAllChanges()
. Любая информация будет полезна.