繁体   English   中英

实体框架。包括创建不正确的JOIN吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM