I have the Put method in a WebApi Rest service
// PUT: api/pessoas/5
[ResponseType(typeof(void))]
public IHttpActionResult Putpessoa(int id, pessoa pessoa)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != pessoa.id)
{
return BadRequest();
}
//exibição dos itens da entidade usuario
var usuario = new usuario
{
id = pessoa.id,
login = pessoa.usuario.login,
senha = pessoa.usuario.senha,
ativo = pessoa.usuario.ativo
};
db.pessoa.Add(pessoa);
usuario.pessoa = pessoa;
db.usuario.Add(usuario);
db.Entry(pessoa).State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!pessoaExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return StatusCode(HttpStatusCode.NoContent);
}
Class personas_endereco
namespace WebApi.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
using Newtonsoft.Json;
[Table("pessoa_endereco")]
public partial class pessoa_endereco
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int id { get; set; }
public int pessoa_id { get; set; }
[Required]
[StringLength(100)]
public string logradouro { get; set; }
[StringLength(20)]
public string numero { get; set; }
[StringLength(50)]
public string complemento { get; set; }
[StringLength(50)]
public string ponto_referencia { get; set; }
[Required]
[StringLength(8)]
public string cep { get; set; }
[StringLength(50)]
public string bairro { get; set; }
[StringLength(100)]
public string nome_contato { get; set; }
[StringLength(20)]
public string telefone_1 { get; set; }
[Required]
[StringLength(10)]
public string ramal_telefone_1 { get; set; }
[StringLength(20)]
public string telefone_2 { get; set; }
[Required]
[StringLength(10)]
public string ramal_telefone_2 { get; set; }
[StringLength(20)]
public string celular { get; set; }
[StringLength(100)]
public string email { get; set; }
[JsonIgnore]
public virtual pessoa pessoa { get; set; }
}
}
It is working, but I need to add another relationship with another entity called person_endereco, similar to the relationship of the user entity. The problem is that user is 1 for 1 and persona_endereco is 1 (person) for many (persona_endereco).
//relacionamento de pessoa com entidade usuario
public virtual usuario usuario { get; set; }
//relacionamento de pessoa com entidade pessoa_endereco
public virtual ICollection<pessoa_endereco> pessoa_endereco { get; set; }
I tried to do the same as user but it does not work:
var pessoa_endereco = new pessoa_endereco
{
id = pessoa.id,
logradouro = pessoa.pessoa_endereco.logradouro
};
The error appears:
Can not implicitly convert type "System.Collections.Generic.ICollection" to "string" WebApi
But if you do:
var pessoa_endereco = new pessoa_endereco
{
id = pessoa.id,
logradouro = 'rua teste'
};
By writing directly it works. But what I need is to get the values coming from the json that was sent to this post.
I solved the problem by following the instructions of Cassio, I did not have to move in the classes just to add in the controler, in the PUT and POST method the code:
var person_endereco1 = new person_endereco ();
foreach (var pessoa_endereco in pessoa.pessoa_endereco)
{
pessoa_id = pessoa.id;
logradouro = pessoa_endereco.logradouro;
cep = pessoa_endereco.cep;
ramal_telefone_1 = pessoa_endereco.ramal_telefone_1;
ramal_telefone_2 = pessoa_endereco.ramal_telefone_1;
pessoa_endereco1 = pessoa_endereco;
};
db.pessoa.Add(pessoa);
pessoa_endereco1.pessoa = pessoa;
db.pessoa_endereco.Add(pessoa_endereco1);