Plinio Leite Costa 0 Denunciar post Postado Agosto 20, 2015 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") } Compartilhar este post Link para o post Compartilhar em outros sites
Ivan.Teles 23 Denunciar post Postado Agosto 20, 2015 Cara vc postou um baixa codigo e não disse onde ta o erro? qual o problema? Compartilhar este post Link para o post Compartilhar em outros sites