The INSERT statement conflicted with the FOREIGN KEY constraint "Fk_dbo.Counter_dbo.Addresse_addressacoid"

Asked

Viewed 162 times

0

I have two problems. I have the entity Accountant, Address and City. Every time I register a new one accountant, I have a dropdowlist who carries the cities so I can choose, the problem is that instead of just selecting the city to the address in question, he’s cloning the city on the bench, that is, whenever I choose the city, he ends up saving the same city, with a Guid different. the other problem is that whenever I have saved the counter, it gives the following error message:

The INSERT statement conflicted with the FOREIGN KEY constraint "Fk_dbo.Counter_dbo.Addresse_addressed". The conflict occurred in database "Smc_ddd_data_guid", table "dbo. Addresses", column 'Enderecoid'. The instruction has been completed.

My model Contador:

  public class Contador: Pessoa
    {
        public Contador()
        {
            ClienteId = Guid.NewGuid();
        }
        public bool Status { get; set; }
        public virtual EnderecoTerceiros Endereco { get; set; }
        public Guid EnderecoId { get; set; }
    }

My Model Address Books:

public class EnderecoTerceiros
    {
        public EnderecoTerceiros()
        {
            EnderecoTerceirosId = Guid.NewGuid();
        }
        public Guid EnderecoTerceirosId { get; set; }
        public string Rua { get; set; }
        public string Bairro { get; set; }
        public string Cep { get; set; }
        public string Complemento { get; set; }
        public string Numero { get; set; }
        public Zona Zona { get; set; }
        public TipoDeEndereco TipoDeEndereco { get; set; }
        public DateTime DataCadastro { get; set; }

        public virtual Cidade Cidade { get; set; }
        public Guid CidadeId { get; set; }

    }

My Model Cities:

public class Cidade
    {
        public Cidade()
        {
            CidadeId = Guid.NewGuid();
        }
        public Guid CidadeId { get; set; }
        public string Nome { get; set; }
        public string Codigo { get; set; }
        public Estado Estado { get; set; }
        public Regioes Regioes { get; set; }
        public DateTime DataCadastro { get; set; }
    }

On my controller it’s like this:

public ActionResult Create(ContadorViewModel contadorViewModel)
        {
            if (!ModelState.IsValid)
            {
                ViewBag.CidadeId = new SelectList(_cidadeAppService.ObterTodos(), "CidadeId", "Nome");
                return View(contadorViewModel);
            }

            var cidade = _cidadeAppService.ObterPorId(contadorViewModel.Endereco.Cidade.CidadeId); // busca a cidade pois ela ta vinda com a propriedade "Nome" vazia, isso gera um erro de validação, pois como eu falei, ele ta salvando a cidade de novo
            contadorViewModel.Endereco.Cidade = cidade;
            contadorViewModel.ClienteId = Guid.NewGuid();
            contadorViewModel.Endereco.EnderecoTerceirosId = Guid.NewGuid();
            _enderecoAppService.Adicionar(contadorViewModel.Endereco);
            _contadorAppService.Adicionar(contadorViewModel);
            return RedirectToAction("Index");


        }

Contador Service:

 public class ContadorAppServico : AppServiceBase, IContadorAppService
    {
        private readonly IContadorRepositorio _repositorio;

        public ContadorAppServico()
        {
            _repositorio = new ContadorRepositorio();
        }
        public ContadorViewModel Adicionar(ContadorViewModel contadorViewModel)
        {
            var contador = Mapper.Map<Contador>(contadorViewModel);
            _repositorio.Adicionar(contador);
            return contadorViewModel;
        }
}

Service Interface:

Public interface IContadorAppService:IDisposable
    {
        ContadorViewModel ObterPorId(Guid id);
        IEnumerable<ContadorViewModel> ObterTodos();
        ContadorViewModel ObterPorCnpj(string cnpj);
        ContadorViewModel Atualizar(ContadorViewModel contadorViewModel);
        ContadorViewModel Adicionar(ContadorViewModel contadorViewModel);
        void Remover(Guid id);
    }

Sercice do Endereço:

     public class EnderecoTerceirosAppService : AppServiceBase, IEnderecoTerceirosAppService
        {
            private readonly IEnderecoTerceirosRepositorio _repositorio;

            public EnderecoTerceirosAppService()
            {
                _repositorio = new EnderecoTerceirosRepositorio();
            }
            public EnderecoTerceirosViewModel Adicionar(EnderecoTerceirosViewModel enderecoViewModel)
            {
                var endereco = Mapper.Map<EnderecoTerceiros>(enderecoViewModel);
                _repositorio.Adicionar(endereco);
                return enderecoViewModel;
            }
}

Honestly speaking, I don’t know why you’re saving a new town. My Action Get Create looks like this:

public ActionResult Create()
        {
            ViewBag.CidadeId = new SelectList(_cidadeAppService.ObterTodos(), "CidadeId", "Nome");
            return PartialView();
        }

And Dropdow is like this:

 @Html.DropDownListFor(model => model.Endereco.Cidade.CidadeId, (IEnumerable<SelectListItem>)ViewBag.CidadeId, string.Empty, new { @class = "municipio caixa_texto", style = "" })

The name of the city is coming Null to count it, theoretically this would not cause me problem, since I only need the Guid, however, as creating a new city, with the city I choose, this generates a validation error.

however, after creating a new city, add the address in the bank, but when the Counter persists, give the conflict error.

  • In his method of create you are calling _enderecoAppService.Adicionar(contadorViewModel.Endereco);. Why a new address is added?

  • because I register address and counter at the same time, so I send to view, counter and address.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.