Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Plinio Leite Costa

Chave Estrangeira

Recommended Posts

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.