这是我第一次尝试将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; }
    }

08-04 11:04