這是我第一次嘗試使用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; }
}
}
您是先手動創建您的外鍵還是通過EF代碼創建您的外鍵? – MaKCbIMKo
我是在SQL Server中完成的。我是否應該在EF? – Caverman
您需要在代碼中以某種方式指定它,因爲默認情況下EF不知道您已經創建了FK。 – MaKCbIMKo