0

表演:

using (var DB = new SiteEntities())
{
  var test = DB.All<AssessmentItem>();
}

结果在这个 SQL 查询中,为什么要执行连接?!我根本没有声明要查询 Products 表,这导致我出现重复数据的问题。我从未见过这种行为。

SELECT 
[Extent1].[ID] AS [ID], 
[Extent1].[Name] AS [Name], 
[Extent1].[Description] AS [Description], 
[Extent1].[Status] AS [Status], 
[Extent1].[UpdatedAt] AS [UpdatedAt], 
[Extent1].[CreatedAt] AS [CreatedAt], 
[Extent1].[Alias] AS [Alias], 
[Extent1].[ImageFileName] AS [ImageFileName], 
[Extent1].[ReplacementCost] AS [ReplacementCost], 
[Extent2].[ID] AS [ID1]
FROM  [dbo].[AssessmentItems] AS [Extent1]
LEFT OUTER JOIN [dbo].[Products] AS [Extent2] ON ([Extent2].[AssessmentItemID] IS NOT NULL) AND ([Extent1].[ID] = [Extent2].[AssessmentItemID])

这是我由实体框架生成的 AssessmentItem.cs:

public partial class AssessmentItem
{
    public AssessmentItem()
    {
        this.AssessmentItemAttributeMappings = new HashSet<AssessmentItemAttributeMapping>();
        this.CustomerAssessmentItems = new HashSet<CustomerAssessmentItem>();
    }

    public int ID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public byte Status { get; set; }
    public Nullable<System.DateTime> UpdatedAt { get; set; }
    public System.DateTime CreatedAt { get; set; }
    public string Alias { get; set; }
    public string ImageFileName { get; set; }
    public Nullable<decimal> ReplacementCost { get; set; }

    public virtual ICollection<AssessmentItemAttributeMapping> AssessmentItemAttributeMappings { get; set; }
    public virtual ICollection<CustomerAssessmentItem> CustomerAssessmentItems { get; set; }
    public virtual Product Product { get; set; }
}

更新:

using (var DB = new SiteEntities())
{
  var test = DB.All<AssessmentItem>()
      .Select(x => new
        {
            x.ID,
            x.Name
        });
}

产品正确的 SQL 查询,一定有某种时髦的推理在后台进行。我仍然想知道是否有人对原因有任何想法。

4

2 回答 2

1

好的,我发现了问题所在,看来我AssessmentItem<>Product在 EF 中已将关系设置为 1-1 关系。作为这个的副产品,产品表上不再有 AssessmentItemID INT 外键,因为我遵循的说明建议删除它,如果不删除它就无法工作,这似乎是问题所在,就像我去的时候一样为了保存Product我直到现在才完成的记录,它抱怨缺少 FK。认为这两个问题是相关的,将 Products 表重新添加到 EF 设计器表面修复了它。

谢谢大家对我的耐心。我真的认为 EF 应该更容易执行 1-1 关系,.Single()每次我希望访问它时,我都必须简单地做 a now 。:(

于 2013-09-23T12:04:41.207 回答
0

DbSet.All通常用于测试序列的项目是否满足特定的谓词..在您的情况下,您没有提供任何谓词,它似乎正在做一个急切的负载。

在您的情况下,它期望 aFunc<AssessmentItem, bool>作为谓词

如果您只是想要所有项目,为什么不简单地说。

DB.AssessmentItems;
于 2013-09-23T11:05:13.197 回答