0

I'm programming in MVC3 and i have the following model :

 public class L_CabecRegistoPedido
    {
        [Key]
        public int Id { get; set; }
        public int Numero { get; set; }
        public int Ano { get; set; }
        public int Utilizador { get; set; }
        public String Cliente { get; set; }
        public String NomeEmpresa { get; set; }
        public String MarcaEmpresa { get; set; }
        public int? Marca { get; set; }
        public String Projecto { get; set; }
        public String Responsavel { get; set; }
        public String EmailResp { get; set; }
        public String TelefoneResp { get; set; }
        public String DepartamentoEmpresa { get; set; }
        public int? Departamento { get; set; }
        public DateTime DataRegisto { get; set; }
        public int? EstadoPedido { get; set; }
        public int? FasePedido { get; set; }
        public DateTime DataEntregaRequisitada { get; set; }
        public DateTime DataEntrega { get; set; }
        public String Observacoes { get; set; }
        public bool Transformacao { get; set; }
        public int Versao { get; set; }
        public List<L_LinhaRegistoPedido> Linhas { get; set; }

    }

    public class L_LinhaRegistoPedido
    {
        [Key]
        public int Id { get; set; }
        public int? IdCabec { get; set; } /* **Foreign Key to L_CabecRegistoPedido ** */
        public int Utilizador { get; set; }
        public String Artigo { get; set; }
        public String CabDescricao { get; set; }
        public String Descricao { get; set; } /* TODO: espaço neste campo*/
        public Double Quantidade { get; set; }
        public DateTime DataRegisto { get; set; }
        public DateTime DataEntregaRequisitada { get; set; }
        public DateTime DataEntrega { get; set; }
        public int? EstadoLinhasPedido { get; set; }
        public int? FaseLinhasPedido { get; set; }
        public String Observacoes { get; set; }
        public bool Transformacao { get; set; }
        public L_CabecRegistoPedido CabecRegisto { get; set; }
        public List<L_SubLinhaRegistoPedido> SubLinhas { get; set; }

    }

Then i'm using DBContext like this :

 public class AppADO : DbContext
    {

        public AppADO(String ConnectionStringName)
            : base(ConnectionStringName) { }

        public DbSet<L_CabecRegistoPedido> L_CabecRegistoPedido { get; set; }
     }

and on the Controller when i make the SaveChanges() I have this code :

 [HttpPost]
        public ActionResult Create(FormCollection formCollection)
        {

            L_LinhaRegistoPedido linhaRegisto = new L_LinhaRegistoPedido();
            try
            {
                if (ModelState.IsValid)
                {
                    if (String.IsNullOrEmpty(formCollection["IDArtigo"])) linhaRegisto.Artigo = null; else linhaRegisto.Artigo = formCollection["IDArtigo"];

                    linhaRegisto.IdCabec =   int.Parse(formCollection["IDRegistoPedido"]);
                    linhaRegisto.Quantidade = Double.Parse(formCollection["IDQuantidade"]);
                    linhaRegisto.CabDescricao = formCollection["IDCabDescricao"];
                    linhaRegisto.Descricao = formCollection["IDDescricao"];
                    linhaRegisto.DataRegisto = DateTime.Parse(formCollection["IDDataRegisto"]);
                    linhaRegisto.DataEntrega = DateTime.Parse(formCollection["IDDataEntrega"]);
                    linhaRegisto.DataEntregaRequisitada = DateTime.Parse(formCollection["IDDataEntregaRequisitada"]);

                    if (string.IsNullOrEmpty(formCollection["IDEstadoLinha"])) linhaRegisto.EstadoLinhasPedido = null; else linhaRegisto.EstadoLinhasPedido = int.Parse(formCollection["IDEstadoLinha"]);
                    if (string.IsNullOrEmpty(formCollection["IDFaseLinha"])) linhaRegisto.FaseLinhasPedido = null; else linhaRegisto.FaseLinhasPedido = int.Parse(formCollection["IDFaseLinha"]);

                    linhaRegisto.Observacoes = formCollection["IDObservacoes"];

                    appAdo.L_LinhaRegistoPedido.Add(linhaRegisto);
                    appAdo.SaveChanges();
                }

                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", ex);
                return View(linhaRegisto);
            }
        }

but I get the Error :

"Invalid column name 'CabecRegisto_Id'."

This column is generated by Entity Framework and i don't know how to associate the Foreign key of L_LinhaRegistoPedido ( IdCabec ) to L_CabecRegisto for the Entity Framework find the foreign and don't generate this automatic..

1 Answer 1

1

Try marking the column explicitly with the ForeignKeyAttribute, like:

public class L_LinhaRegistoPedido
{
    [Key]
    public int Id { get; set; }

    /* **Foreign Key to L_CabecRegistoPedido ** */
    [ForeignKey("CabecRegisto")] 
    public int? IdCabec { get; set; } 
    public L_CabecRegistoPedido CabecRegisto { get; set; }       

    // All other properties omitted 
}

Inside the constructor of the ForeignKeyAttribute I placed the name of the property CabecRegistro, which I assume acts as a navigation property for IdCabec. You might want to make CabecRegistro virtual to enable Layzy loading.

public virtual L_CabecRegistoPedido CabecRegisto { get; set; }

By the way, if you remove IdCabec altogether EF should take care of creating the Foreign Key relations in the database itself. In that case you loose control over the naming, of course.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.