как использовать один TransactionScope или context.Database.BeginTransactionn в нескольких классах?
Я использую Codesmith Tools для генерации классов с Entity Framework.
При выполнении кода возникает следующая ошибка: экземпляр ObjectContext отброшен и больше не может использоваться для операций, требующих подключения.
Я не могу создать одну транзакцию для использования обоими классами.
using Sivisam.Data;
using PagedList;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Transactions;
using Newtonsoft.Json;
using Sivisam.Dto.Seguranca;
namespace Sivisam.Rng.Seguranca
{
public class Usuario
{
public SivisamDataContext Context;
public Usuario()
{
Context = new SivisamDataContext();
}
public Usuario(SivisamDataContext pContext)
{
Context = pContext;
}
public Data.Usuario Cadastrar(Data.Usuario dtoUsuario, Data.Pessoa
dtoPessoa)
{
using (Context)
{
using (TransactionScope Scope = new TransactionScope())
{
Pessoa rngPessoa = new Pessoa(Context);
rngPessoa.Cadastrar(dtoPessoa);
dtoUsuario.CodigoPessoa = dtoPessoa.Codigo;
Context.Usuario.AddObject(dtoUsuario);
Context.SaveChanges();
Scope.Complete();
}
}
return dtoUsuario;
}
}
}
using Sivisam.Data;
using PagedList;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Transactions;
using Newtonsoft.Json;
using Sivisam.Dto.Seguranca;
namespace Sivisam.Rng.Seguranca
{
public class Pessoa
{
public SivisamDataContext Context;
public Pessoa()
{
Context = new SivisamDataContext();
}
public Pessoa(SivisamDataContext pContext)
{
Context = pContext;
}
public virtual Data.Pessoa Cadastrar(Data.Pessoa dtoPessoa)
{
using ( Context )
{
using (TransactionScope Scope = new TransactionScope())
{
Context.Pessoa.AddObject(dtoPessoa);
Context.SaveChanges();
Scope.Complete();
}
}
return dtoPessoa;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using Sivisam.Rng;
namespace Sivisam.Web.Controllers
{
public class DefaultController : Sivisam.Web.Controllers.Base
{
public ActionResult CadastrarUsuario()
{
Rng.Seguranca.Usuario rngUsuario = new Rng.Seguranca.Usuario();
Data.Pessoa DataPessoa = new Data.Pessoa();
DataPessoa.Cep = "21212212";
DataPessoa.CodigoCidade = 1;
DataPessoa.ComplementoEndereco = "";
DataPessoa.Cpf = "66762251543";
DataPessoa.DataNascimento = DateTime.Now;
DataPessoa.EmissorRg = "sspba";
DataPessoa.Endereco = "snf dklashdklfaslkgdask";
DataPessoa.Nome = "nfdl akshfkahs";
DataPessoa.NumeroEndereco = "111";
DataPessoa.ReferenciaEndereco = "ewqeqwe";
DataPessoa.Rg = "0243552634";
DataPessoa.TelefoneCelular = "75899897867";
DataPessoa.TelefoneResidencial = "75899897867";
Data.Usuario DataUsuario = new Data.Usuario();
DataUsuario.Ativo = 1;
DataUsuario.DataHoraCadastro = DateTime.Now;
DataUsuario.EhServidor = 1;
DataUsuario.Email = "lucas@gmail.com";
DataUsuario.Hash = "zvczxvzv";
DataUsuario.IpCadastro = "1.1.1.1";
rngUsuario.Cadastrar(DataUsuario, DataPessoa);
return View();
}
}
}