Linq для SQL нескольких контекста данных в одной транзакции

Я работаю над проектом, в котором у меня есть несколько репозиториев для извлечения данных из разных таблиц. Все мои репозитории независимы, они создают новый dataContext, добавляют строку в таблицу и применяют команду отправки изменений. Теперь, если в моем сервисе, есть ситуация, когда мне нужно вставить данные в несколько таблиц, но это должно произойти за одну транзакцию. Я могу добиться этого с помощью TrnasctionScope, но для этого нужен тот же dataContext. Поскольку я использую StrucutreMap для создания своих объектов, я не могу получить тот же контекст данных, поэтому моя транзакция не удалась.

Вот как мои объекты.

interface IConnection
{
 MyDataContext GetContext();
}

public class Connection : IConnection
{

   public MyDataContext GetContext()
   {
    return new MyDataContext();
   }

} 

interface IRepositryA
{
  int SaveDataA(objectA a);
}

public class RepositoryA : IRepositryA
{
     public int SaveDataA(objectA a)
     {
        var context = objectFactory.GetInstance<IConnection>().GetContext();   
        context.TableA.InsertOnSubmit(a);
        context.SubmitChanges();

        return a.ID;
     }
}

interface IRepositryB
{
   int SaveDataA(objectB b);
}

public class RepositoryA : IRepositryB
{
     public int SaveDataB(objectB b)
     {

        var context = objectFactory.GetInstance<IConnection>().GetContext();   
        context.TableB.InsertOnSubmit(b);
        context.SubmitChanges();
        return b.ID;
     }
}

Теперь в моем слое обслуживания я называю их как

public MyServiceClass ()
 {
 public SaveAll(ObjectA a, ObjectB b)
 {

             using (TransactionScope trn);
            {
                ObjectFactory.GetInstance<IRepositryA>().SaveDataA(a);
                b.FkeyID = a.ID;
                ObjectFactory.GetInstance<IRepositryB>().SaveDataB(b);

                trn.complete();   
            }

  }
}

Как я передам один и тот же контекст данных в два разных репозитория. Я подумал, что в каждом репозитории создается один перегруженный метод, который принимает параметр IDataContext, как указано ниже.

interface IRepositryA
{
  int SaveDataA(objectA a);
  int SaveDataA(IConnection connection, objectA a);

}

public class RepositoryA : IRepositryA
{
     public int SaveDataA(objectA a)
     {
        var connection = objectFactory.GetInstance<IConnection>();   

        return SaveData(connection, a);
     }

     public int SaveDataA(IConnection connection, objectA a)
     {
        var context = connection.GetContext();   
        context.TableA.InsertOnSubmit(a);
        context.SubmitChanges();

        return a.ID;
     }

}

interface IRepositryB
{
   int SaveDataA(objectB b);
   int SaveDataA(IConnection connection, objectB b);

}

public class RepositoryA : IRepositryB
{
     public int SaveDataB(objectB b)
     {
        var connection = objectFactory.GetInstance<IConnection>();   
        return SaveData(connection, b);
     }

     public int SaveDataA(IConnection connection, objectB b)
     {
        var context = connection.GetContext();   
        context.TableB.InsertOnSubmit(b);
        context.SubmitChanges();

        return b.ID;
     }
}

и на моем уровне обслуживания, я бы реализовать его как

public MyServiceClass ()
 {
 public SaveAll(ObjectA a, ObjectB b)
 {
            IConnection connection= ObjectFactory.GetInstance<IConnection>();
            using (TransactionScope trn);
            {
                ObjectFactory.GetInstance<IRepositryA>().SaveDataA(connection,a);
                b.FkeyID = a.ID;
                ObjectFactory.GetInstance<IRepositryB>().SaveDataB(connection,b);

                trn.complete();   
            }

  }
}

Вторая мысль, которая у меня возникла: если я каким-то образом смогу настроить DataContext для возврата того же соединения, когда я вызываю метод GetContext поэтому все репозитории будут использовать одно и то же соединение. Но я чувствую, что это будет поддерживать связь постоянно. Я хочу, чтобы это соединение было доступно только во время использования этого метода SaveAll.

Ваша помощь будет оценена. Заранее спасибо.

Приветствия Парминдер

Ответы на вопрос(1)

Ваш ответ на вопрос