2011-04-05 81 views
0

我在MVC3編程和我有以下型號:實體框架 - 代碼第一次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; } 

    } 

然後我使用的DbContext是這樣的:

public class AppADO : DbContext 
    { 

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

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

並在控制器的時候,我做的SaveChanges()我有這樣的代碼:

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

,但我得到的錯誤:

「無效的列名'CabecRegisto_Id'。」

由實體框架生成此列,我不知道如何L_LinhaRegistoPedido(IdCabec)的外鍵的實體框架找到國外關聯到L_CabecRegisto並不會產生這種自動..

回答

1

嘗試使用ForeignKeyAttribute明確標識列,如:

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 
} 

裏面ForeignKeyAttribute的構造我把財產CabecRegistro,我認爲作爲一個導航屬性IdCabec的名稱。您可能想讓CabecRegistrovirtual啓用Layzy加載。

public virtual L_CabecRegistoPedido CabecRegisto { get; set; } 

順便說一句,如果您完全刪除IdCabec,EF應該照顧在數據庫本身中創建外鍵關係。在這種情況下,你當然無法控制命名。