Chave Estrangeira
Bom dia pessoal,
estou tendo dificuldades em salvar a chave estrangeira.
Tenho duas tabelas: Uf e EmpresaConveniada.
Uma empresa conveniada terá uma UF.
Uma UF terá várias empresas conveniadas.
Defini o relacionamento, porém ao salvar está me retornando o seguinte erro:
Uf:
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace Exodo.Dominio
{
public class Uf
{
[Required(ErrorMessage="Id da UF é obrigatório")]
[Key]
[Display(Name="Id")]
public int IdUf { get; set; }
[Required(ErrorMessage="Campo obrigatório")]
[StringLength(100, ErrorMessage="Tamanho Maximo para o campo nome da UF: 100 caracteres")]
[Display(Name="Descrição")]
public string nmuf { get; set; }
[Required(ErrorMessage="Campo obrigatório")]
[StringLength(2, ErrorMessage="Tamanho do campo sigla: 2 caracteres")]
[Display(Name="Sigla")]
public string sguf { get; set; }
public virtual IEnumerable<EmpresaConveniada> empresasConveniadas { get; set; }
}
}
Empresa Conveniada:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Exodo.Dominio
{
public class EmpresaConveniada
{
[Required]
[Key]
public int idEmpresaConveniada { get; set; }
[Required(ErrorMessage="Informe o nome do convênio")]
[StringLength(150, ErrorMessage="Nome do convênio possui limite de 150 caracteres")]
[Display(Name="Convênio")]
public string nmconvenio { get; set; }
[Required(ErrorMessage="Informe a Razão Social da Empresa Conveniada")]
[StringLength(150, ErrorMessage="Razão Social da Empresa Conveniada Possui Limite de 150 Caracteres")]
[Display(Name = "Razão Social")]
public string rzsocial { get; set; }
[Required(ErrorMessage="Informe o Nome Fantasia da Empresa Conveniada")]
[StringLength(100, ErrorMessage="Nome Fantasia Possui Limite de 100 Caracteres")]
[Display(Name = "Nome Fantasia")]
public string nmfantasia { get; set; }
[Required(ErrorMessage="Informe o C.N.P.J. da Empresa Conveniada")]
[StringLength(20, ErrorMessage="CNPJ Possui Limite de 20 Caracteres")]
[Display(Name = "C.N.P.J.")]
public string nucnpj { get; set; }
[Required(ErrorMessage="Informe a Inscrição Estadual da Empresa Conveniada")]
[StringLength(20, ErrorMessage = "O campo Inscrição Estadual possui o limite de 20 caracteres")]
[Display(Name = "Inscrição Estadual")]
public string nuinscestadual { get; set; }
[StringLength(15, ErrorMessage="Inscrição Municipal da Empresa Conveniada Possui Limite de 15 Caracteres")]
[Display(Name = "Inscrição Muncipal")]
public string nuinscmunicipal { get; set; }
[Display(Name = "Endereço")]
[StringLength(200, ErrorMessage = "O campo endereço possui o limite de 200 caracteres")]
[Required(ErrorMessage = "Endereço do estabelecimento é obrigatório")]
public string dsendereco { get; set; }
[Display(Name = "Número")]
[StringLength(10, ErrorMessage = "O campo número do endereço possui limite de 10 caracteres")]
[Required(ErrorMessage = "O número do endereço é obrigatório")]
public string nuendereco { get; set; }
[Display(Name = "Complemento")]
[StringLength(10, ErrorMessage="O campo Complemento possui limite de 10 caracteres")]
public string dscomplemento { get; set; }
[Display(Name = "CEP")]
[StringLength(12, ErrorMessage = "O campo CEP possui limite de 12 caracteres")]
[Required(ErrorMessage = "O CEP é obrigatório")]
public string nucep { get; set; }
[Display(Name = "Bairro")]
[StringLength(120, ErrorMessage = "O campo Bairro possui limite de 120 caracteres")]
[Required(ErrorMessage = "O Bairro é obrigatório")]
public string nmbairro { get; set; }
[Display(Name = "Cidade")]
[StringLength(120, ErrorMessage = "O campo Cidade possui limite de 120 caracteres")]
[Required(ErrorMessage = "Cidade é obrigatório")]
public string nmcidade { get; set; }
[Display(Name = "Fone")]
[StringLength(15, ErrorMessage = "O campo Fone da Empresa Conveniada possui o limite de 15 caracteres")]
public string nufone { get; set; }
[Display(Name = "Celular")]
[StringLength(15, ErrorMessage = "O campo Celular da Empresa Conveniada possui o limite de 15 caracteres")]
public string nucelular { get; set; }
[Display(Name = "e-mail")]
[StringLength(150, ErrorMessage = "O campo e-mail da Empresa Conveniada possui o limite de 150 caracteres")]
public string email { get; set; }
[Display(Name = "Observação")]
[StringLength(300, ErrorMessage = "O Campo Observação possui limite de 300 caracteres")]
public string dsobservacao { get; set; }
[Display(Name = "Data Cadastro")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime dtCadastro { get; set; }
[Display(Name = "Nome Contato")]
[StringLength(20, ErrorMessage = "O campo Nome Contato possui o limite de 20 caracteres")]
[Required(ErrorMessage = "Nome do Contato é obrigatório")]
public string nmcontato { get; set; }
[Display(Name = "Fone Contato")]
[StringLength(15, ErrorMessage = "O campo Fone do Contato possui o limite de 15 caracteres")]
[Required(ErrorMessage = "Fone do Contato é obrigatório")]
public string nufonecontato { get; set; }
[Display(Name = "Celular Contato")]
[StringLength(15, ErrorMessage = "O campo Celular do Contato possui o limite de 15 caracteres")]
[Required(ErrorMessage = "Número do Celular do Contato é obrigatório")]
public string nucelularcontato { get; set; }
[Display(Name = "e-mail Contato")]
[StringLength(150, ErrorMessage = "O campo e-mail do Contato possui o limite de 150 caracteres")]
[Required(ErrorMessage = "O campo e-mail do contato é obrigatório")]
public string emailcontato { get; set; }
[Display(Name="Data Inclusão")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")]
public DateTime dtinclusao { get; set; }
[Display(Name="Data Alteração")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")]
public DateTime dtalteracao { get; set; }
[Display(Name="Usuário Inclusão")]
public string usuinclusao { get; set; }
[Display(Name="Usuário Alteração")]
public string usualteracao { get; set; }
[Display(Name = "U.F.")]
public virtual Uf Uf { get; set; }
public int idUF;
}
}
EmpresaConveniadaController:
using System;
using System.Linq;
using System.Web.Mvc;
using DevExpress.Web.Mvc;
using Exodo.Aplicacao;
using Exodo.Dominio;
namespace Exodo.Controllers
{
public class EmpresaConveniadaController : Controller
{
public readonly EmpresaConveniadaAplicacao appConvenio;
public readonly UfAplicacao appUf;
public EmpresaConveniadaController()
{
appConvenio = EmpresaConveniadaConstrutor.EmpConvAplicacao();
appUf = UfAplicacaoContrutor.UfAplicacaoEF();
}
public ActionResult Index()
{
var listaEmpresaConveniada = appConvenio.listarTodos();
return View(listaEmpresaConveniada);
}
public ActionResult Adicionar()
{
var todasUfs = appUf.listarTodos();
ViewBag.UfId = new SelectList(todasUfs, "IDUF", "SGUF");
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Adicionar(EmpresaConveniada empConv)
{
var todasUfs = appUf.listarTodos();
ViewBag.IdUf = new SelectList(todasUfs, "IDUF", "SGUF");
if (ModelState.IsValid)
{
appConvenio.salvar(empConv);
return RedirectToAction("Index");
}
return View(empConv);
}
public ActionResult Editar()
{
return View();
}
Exodo.Repositorio.Contexto db = new Exodo.Repositorio.Contexto();
[ValidateInput(false)]
public ActionResult GridViewPartial()
{
var model = db.Conveniadas;
return PartialView("_GridViewPartial", model.ToList());
}
[HttpPost, ValidateInput(false)]
public ActionResult GridViewPartialAddNew([ModelBinder(typeof(DevExpressEditorsBinder))] Exodo.Dominio.EmpresaConveniada item)
{
var model = db.Conveniadas;
if (ModelState.IsValid)
{
try
{
model.Add(item);
db.SaveChanges();
}
catch (Exception e)
{
ViewData["EditError"] = e.Message;
}
}
else
ViewData["EditError"] = "Please, correct all errors.";
return PartialView("_GridViewPartial", model.ToList());
}
[HttpPost, ValidateInput(false)]
public ActionResult GridViewPartialUpdate([ModelBinder(typeof(DevExpressEditorsBinder))] Exodo.Dominio.EmpresaConveniada item)
{
var model = db.Conveniadas;
if (ModelState.IsValid)
{
try
{
var modelItem = model.FirstOrDefault(it => it.idEmpresaConveniada == item.idEmpresaConveniada);
if (modelItem != null)
{
this.UpdateModel(modelItem);
db.SaveChanges();
}
}
catch (Exception e)
{
ViewData["EditError"] = e.Message;
}
}
else
ViewData["EditError"] = "Please, correct all errors.";
return PartialView("_GridViewPartial", model.ToList());
}
[HttpPost, ValidateInput(false)]
public ActionResult GridViewPartialDelete(System.Int32 idEmpresaConveniada)
{
var model = db.Conveniadas;
if (idEmpresaConveniada >= 0)
{
try
{
var item = model.FirstOrDefault(it => it.idEmpresaConveniada == idEmpresaConveniada);
if (item != null)
model.Remove(item);
db.SaveChanges();
}
catch (Exception e)
{
ViewData["EditError"] = e.Message;
}
}
return PartialView("_GridViewPartial", model.ToList());
}
public ActionResult cbxUfPartial()
{
return PartialView("_cbxUfPartial");
}
}
}
using System.Data.Entity;
using System.Collections.Generic;
using System.Linq;
using Exodo.Dominio;
namespace Exodo.Repositorio
{
public class EmpresaConveniadaRepositorio:IRepositorio<EmpresaConveniada>
{
private readonly Contexto contexto;
public EmpresaConveniadaRepositorio()
{
contexto = new Contexto();
}
public void salvar(EmpresaConveniada entidade)
{
if (entidade.idEmpresaConveniada > 0)
{
var convenioAlterar = contexto.Conveniadas.First(x => x.idEmpresaConveniada == entidade.idEmpresaConveniada);
convenioAlterar.nmconvenio = entidade.nmconvenio;
convenioAlterar.rzsocial = entidade.rzsocial;
convenioAlterar.nmfantasia = entidade.nmfantasia;
convenioAlterar.nucnpj = entidade.nucnpj;
convenioAlterar.nuinscestadual = entidade.nuinscestadual;
convenioAlterar.nuinscmunicipal = entidade.nuinscmunicipal;
convenioAlterar.dsendereco = entidade.dsendereco;
convenioAlterar.nuendereco = entidade.nuendereco;
convenioAlterar.dscomplemento = entidade.dscomplemento;
convenioAlterar.nucep = entidade.nucep;
convenioAlterar.nmbairro = entidade.nmbairro;
convenioAlterar.nmcidade = entidade.nmcidade;
convenioAlterar.nufone = entidade.nufone;
convenioAlterar.nucelular = entidade.nucelular;
convenioAlterar.email = entidade.email;
convenioAlterar.nmcontato = entidade.nmcontato;
convenioAlterar.nufonecontato = entidade.nufonecontato;
convenioAlterar.nucelularcontato = entidade.nucelularcontato;
convenioAlterar.emailcontato = entidade.emailcontato;
convenioAlterar.dsobservacao = entidade.dsobservacao;
convenioAlterar.dtCadastro = entidade.dtCadastro;
convenioAlterar.usuinclusao = entidade.usuinclusao;
convenioAlterar.usualteracao = entidade.usualteracao;
convenioAlterar.Uf = contexto.Ufs.ToList().Where(x => x.IdUf == entidade.Uf.IdUf).FirstOrDefault();
}
else
{
entidade.Uf = contexto.Ufs.ToList().Where(x => x.IdUf == entidade.Uf.IdUf).FirstOrDefault();
contexto.Conveniadas.Add(entidade);
}
contexto.SaveChanges();
}
public void excluir(EmpresaConveniada entidade)
{
if(entidade.idEmpresaConveniada > 0)
{
var convenioExcluir = contexto.Conveniadas.First(x => x.idEmpresaConveniada == entidade.idEmpresaConveniada);
contexto.Set<EmpresaConveniada>().Remove(convenioExcluir);
contexto.SaveChanges();
}
}
public EmpresaConveniada porId(int id)
{
return contexto.Conveniadas.First(x => x.idEmpresaConveniada == id);
}
public IEnumerable<EmpresaConveniada> listarTodos()
{
return contexto.Conveniadas.ToList();
}
}
}
View:
@model Exodo.Dominio.EmpresaConveniada
@{
ViewBag.Title = "Adicionar";
}
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Informações Básicas</legend>
<table>
<tr>
<td>
@Html.LabelFor(model => model.nmconvenio)
</td>
<td>
@Html.LabelFor(model => model.rzsocial)
</td>
<td>
@Html.LabelFor(model => model.nmfantasia)
</td>
</tr>
<tr>
<td>
@Html.EditorFor(m => m.nmconvenio)
</td>
<td>
@Html.EditorFor(m => m.rzsocial)
</td>
<td>
@Html.EditorFor(m => m.nmfantasia)
</td>
</tr>
<tr>
<td>
@Html.LabelFor(model => model.nucnpj)
</td>
<td>
@Html.LabelFor(model => model.nuinscestadual)
</td>
<td>
@Html.LabelFor(model => model.nuinscmunicipal)
</td>
</tr>
<tr>
<td>
@Html.EditorFor(m => m.nucnpj)
</td>
<td>
@Html.EditorFor(m => m.nuinscestadual)
</td>
<td>
@Html.EditorFor(m => m.nuinscmunicipal)
</td>
</tr>
<tr>
<td>
@Html.LabelFor(model => model.nufone)
</td>
<td>
@Html.LabelFor(model => model.nucelular)
</td>
<td>
@Html.LabelFor(model => model.email)
</td>
</tr>
<tr>
<td>
@Html.EditorFor(m => m.nufone)
</td>
<td>
@Html.EditorFor(m => m.nucelular)
</td>
<td>
@Html.EditorFor(m => m.email)
</td>
</tr>
</table>
</fieldset>
<fieldset>
<legend>Endereço</legend>
<table>
<tr>
<td>
@Html.LabelFor(model => model.nucep)
</td>
</tr>
<tr>
<td>
@Html.EditorFor(m => m.nucep)
</td>
</tr>
<tr>
<td>
@Html.LabelFor(model => model.dsendereco)
</td>
<td>
@Html.LabelFor(model => model.nuendereco)
</td>
<td>
@Html.LabelFor(model => model.dscomplemento)
</td>
</tr>
<tr>
<td>
@Html.EditorFor(m => m.dsendereco)
</td>
<td>
@Html.EditorFor(m => m.nuendereco)
</td>
<td>
@Html.EditorFor(m => m.dscomplemento)
</td>
</tr>
<tr>
<td>
@Html.LabelFor(model => model.nmbairro)
</td>
<td>
@Html.LabelFor(model => model.nmcidade)
</td>
<td>
UF:
</td>
</tr>
<tr>
<td>
@Html.EditorFor(m => m.nmbairro)
</td>
<td>
@Html.EditorFor(m => m.nmcidade)
</td>
<td>
@Html.DropDownList("UfId");
@*
@Html.DropDownListFor(m => m.idUF,(
(IEnumerable<Exodo.Dominio.Uf>)
ViewBag.ufsListadas).Select(option => new SelectListItem{
Text = option.sguf,
Value = Convert.ToString(option.IdUf),
Selected = (Model != null) && (option.IdUf == Model.idUF)}),
"Selecione U.F.", new {@class = "form-control"})*@
</td>
</tr>
</table>
<fieldset>
<legend>Informações Sobre o Contato / Representante </legend>
<table>
<tr>
<td>
@Html.LabelFor(model => model.nmcontato)
</td>
<td>
@Html.LabelFor(model => model.nufonecontato)
</td>
<td>
@Html.LabelFor(model => model.nucelularcontato)
</td>
<td>
@Html.LabelFor(model => model.emailcontato)
</td>
</tr>
<tr>
<td>
@Html.EditorFor(m => m.nmcontato)
</td>
<td>
@Html.EditorFor(m => m.nufonecontato)
</td>
<td>
@Html.EditorFor(m => m.nucelularcontato)
</td>
<td>
@Html.EditorFor(m => m.emailcontato)
</td>
</tr>
</table>
</fieldset>
</fieldset>
<table>
<tr>
<td>
@Html.DevExpress().Button(settings =>
{
settings.Name = "btnSalvar";
settings.Text = "Salvar Registro" ;
settings.UseSubmitBehavior = true;
}).GetHtml()
</td>
</tr>
<tr>
<td>
<input type="submit" value="Salvar" />
</td>
<td>
@Html.ActionLink("Retornar à Tela Anterior", "Index")
</td>
</tr>
</table>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Discussão (1)
Carregando comentários...