gpt4 book ai didi

c# - Entity Framework 。包括创建不正确的 JOIN?

转载 作者:太空宇宙 更新时间:2023-11-03 15:21:50 24 4
gpt4 key购买 nike

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

关于c# - Entity Framework 。包括创建不正确的 JOIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37052499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com