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?– Hermes Autran
because I register address and counter at the same time, so I send to view, counter and address.
– Rafael Passos