2011-04-05 3 views
0

Je suis programmation MVC3 et j'ai le modèle suivant:Entity Framework - premier code 4.1 - ASP.NET MVC3

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; } 

    } 

Alors je suis en utilisant DBContext comme ceci:

public class AppADO : DbContext 
    { 

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

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

et sur le contrôleur quand je fais les SaveChanges() J'ai ce 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); 
      } 
     } 

mais je reçois l'erreur:

"Nom de colonne invalide 'CabecRegisto_Id'."

Cette colonne est générée par Entity Framework et je ne sais pas comment associer la clé étrangère de L_LinhaRegistoPedido (IdCabec) à L_CabecRegisto pour Entity Framework trouver et étranger ne génèrent pas automatique ..

Répondre

1

Essayez de sélectionner la colonne explicitement avec le ForeignKeyAttribute, comme:

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 
} 

a l'intérieur du constructeur de la ForeignKeyAttribute j'ai placé le nom de la propriété CabecRegistro, que je suppose agit comme une propriété de navigation pour IdCabec. Vous souhaiterez peut-être créer CabecRegistrovirtual pour activer le chargement Layzy.

public virtual L_CabecRegistoPedido CabecRegisto { get; set; } 

Soit dit en passant, si vous supprimez IdCabec tout à fait EF devrait prendre soin de créer les relations clés étrangères dans la base de données elle-même. Dans ce cas, vous perdez le contrôle de la désignation, bien sûr.

Questions connexes