I have two entities generated by the code-first wizard:
Person
[Table("pessoa")]
public partial class pessoa
{
public pessoa()
{
pessoa_endereco = new HashSet<pessoa_endereco>();
}
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int id { get; set; }
[Column(TypeName = "char")]
[Required]
[StringLength(1)]
public string tipo { get; set; }
[Required]
[StringLength(100)]
public string razao_social { get; set; }
[StringLength(100)]
public string nome_fantasia { get; set; }
[StringLength(14)]
public string cpf_cnpj { get; set; }
[StringLength(15)]
public string rg_insc_estadual { get; set; }
[JsonIgnore]
public virtual administrador administrador { get; set; }
[JsonIgnore]
public virtual banco banco { get; set; }
[JsonIgnore]
public virtual cliente cliente { get; set; }
[JsonIgnore]
public virtual filial filial { get; set; }
[JsonIgnore]
public virtual fornecedor fornecedor { get; set; }
[JsonIgnore]
public virtual ICollection<pessoa_endereco> pessoa_endereco { get; set; }
public virtual usuario usuario { get; set; }
[JsonIgnore]
public virtual vendedor vendedor { get; set; }
}
User - Relationship 1 to 1 with person (person.id = user.id)
[Table("usuario")]
public partial class usuario
{
public usuario()
{
caixa = new HashSet<caixa>();
pedido_venda = new HashSet<pedido_venda>();
usuario_perfil = new HashSet<usuario_perfil>();
usuario_permissao = new HashSet<usuario_permissao>();
}
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int id { get; set; }
[StringLength(50)]
public string login { get; set; }
[StringLength(50)]
public string senha { get; set; }
[Column(TypeName = "char")]
[StringLength(1)]
public string ativo { get; set; }
[JsonIgnore]
public virtual ICollection<caixa> caixa { get; set; }
[JsonIgnore]
public virtual ICollection<pedido_venda> pedido_venda { get; set; }
[JsonIgnore]
public virtual pessoa pessoa { get; set; }
[JsonIgnore]
public virtual ICollection<usuario_perfil> usuario_perfil { get; set; }
[JsonIgnore]
public virtual ICollection<usuario_permissao> usuario_permissao { get; set; }
}
}
I have 2 controllers dynamically created by the helper, with the Entity Framework. How do I create a Controller that inserts the data at once into the 2 entities?
Controller person
namespace WebApi.Controllers
{
public class pessoasController : ApiController
{
private ModelTake db = new ModelTake();
// GET: api/pessoas
public IQueryable<pessoa> Getpessoa()
{
return db.pessoa;
}
// GET: api/pessoas/5
[ResponseType(typeof(pessoa))]
public IHttpActionResult Getpessoa(int id)
{
pessoa pessoa = db.pessoa.Find(id);
if (pessoa == null)
{
return NotFound();
}
return Ok(pessoa);
}
// 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();
}
db.Entry(pessoa).State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!pessoaExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return StatusCode(HttpStatusCode.NoContent);
}
// POST: api/pessoas
[ResponseType(typeof(pessoa))]
public IHttpActionResult Postpessoa(pessoa pessoa)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.pessoa.Add(pessoa);
try
{
db.SaveChanges();
}
catch (DbUpdateException)
{
if (pessoaExists(pessoa.id))
{
return Conflict();
}
else
{
throw;
}
}
return CreatedAtRoute("DefaultApi", new { id = pessoa.id }, pessoa);
}
// DELETE: api/pessoas/5
[ResponseType(typeof(pessoa))]
public IHttpActionResult Deletepessoa(int id)
{
pessoa pessoa = db.pessoa.Find(id);
if (pessoa == null)
{
return NotFound();
}
db.pessoa.Remove(pessoa);
db.SaveChanges();
return Ok(pessoa);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
private bool pessoaExists(int id)
{
return db.pessoa.Count(e => e.id == id) > 0;
}
}
}
Code added to the system (Cassio Answer) for anyone interested.
Controller:
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);
Example json used to insert!
{
"id": 4,
"tipo": "J",
"razao_social": "INTELIDER",
"nome_fantasia": "INTELIDER",
"cpf_cnpj": "0",
"rg_insc_estadual": "0",
"usuario": {
"id": 4,
"login": "gleyson",
"senha": "123456",
"ativo": "S"
}
}