[英]Entity Framework .Include creating an incorrect JOIN?
这是我第一次尝试将EF与.include一起使用,以联接两个表。 当我运行它时,我得到一个错误,即“ CallStatus_Id”是无效的列。 没错,我在表中没有该字段,但是我不知道为什么EF在SQL查询中使用该字段。
我所做的是在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();
我对lambda的理解是,它将调用CustomerCalls表,并使用创建的FK将其联接到CallStatus表,并且WHERE语句将根据传递到存储库方法中的id提取CustomerCall的ID。
它创建以下SQL。 您可以在JOIN中看到它创建了[Extent1]。[CallStatus_Id],这是不正确的。 我没有该列,应该为[Extent1]。[Status],但我不知道如何更正
这些是我的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; }
}
}
通过此处发布的建议,我似乎可以通过将[ForeignKey(“ Status”)]批注添加到CustomerCall实体中的CallStatus导航属性中来使其工作。 我还需要在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; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.