実行:
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])
これは、Entity Framework によって生成された私の 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 クエリを生成します。バックグラウンドである種のファンキーな推論が行われている必要があります。誰かが理由について何か考えを持っているかどうか、私はまだ知りたいです.