2016-05-05 48 views
2

這是我第一次嘗試使用EF與.include以加入兩個表。當我運行它時,我得到了錯誤,「CallStatus_Id」是一個無效的列。這是正確的,我沒有在表中的字段,但我不知道爲什麼EF使用它的SQL查詢。實體框架。包括創建不正確的JOIN?

我所做的是在我的CustomerCall表上創建一個外鍵,將CustomerCall.Status設置爲CallStatus.Id。我的想法是,我將PK值存儲在CustomerCall.Status字段中,並將其加入到CallStutus.Id中,以便我可以獲取CallStatus.StatusName以進行顯示。

這裏是我的lambda表達式:

var call = db.CustomerCalls.Include(s => s.CallStatus).Where(c => c.Id == id).FirstOrDefault(); 

我的拉姆達的理解是,它調用CustomerCalls表,使用所創建的FK其加入CallStatus表和WHERE語句將拉CustomerCall的ID基於傳入存儲庫方法的ID。

它創建以下SQL。你可以在JOIN中看到它創建[Extent1]。[CallStatus_Id]這是不正確的。我沒有這樣的列,它應該是[Extent1] [狀態]我不如何糾正它

這些都是我的EF實體類:

namespace CPPCustomerCall.Models 
{ 
    using System; 
    using System.ComponentModel.DataAnnotations; 
    using System.ComponentModel.DataAnnotations.Schema; 

    [Table("CustomerCall")] 
    public partial class CustomerCall 
    { 
     public int Id { get; set; } 

     [StringLength(50)] 
     public string CustomerName { get; set; } 

     [StringLength(50)] 
     public string Subject { get; set; } 

     [Column(TypeName = "text")] 
     public string Comment { get; set; } 

     public DateTime? CallDate { get; set; } 

     public int? Status { get; set; } 

     public int? AssignedTo { get; set; } 

     public DateTime? CreateDate { get; set; } 


     public CallStatus CallStatus { get; set; } 

    } 
} 

namespace CPPCustomerCall.Models 
{ 
    using System.ComponentModel.DataAnnotations; 

    public partial class CallStatus 
    { 
     public int Id { get; set; } 

     [StringLength(25)] 
     public string StatusName { get; set; } 
    } 
} 
+0

您是先手動創建您的外鍵還是通過EF代碼創建您的外鍵? – MaKCbIMKo

+0

我是在SQL Server中完成的。我是否應該在EF? – Caverman

+0

您需要在代碼中以某種方式指定它,因爲默認情況下EF不知道您已經創建了FK。 – MaKCbIMKo

回答

0

隨着貼在這裏的建議它看起來像我通過在我的CustomerCall實體的CallStatus導航屬性中添加[ForeignKey(「Status」)]註釋來工作。我還需要在我的CallStatus實體的Id字段上設置[Key]。

public partial class CustomerCall 
    { 
     public int Id { get; set; } 

     [StringLength(50)] 
     public string CustomerName { get; set; } 

     [StringLength(50)] 
     public string Subject { get; set; } 

     [Column(TypeName = "text")] 
     public string Comment { get; set; } 

     public DateTime? CallDate { get; set; } 

     public int? Status { get; set; } 

     public int? AssignedTo { get; set; } 

     public DateTime? CreateDate { get; set; } 

     [ForeignKey("Status")] 
     public CallStatus CallStatus { get; set; } 

    } 

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

     [StringLength(25)] 
     public string StatusName { get; set; } 
    }