表演:EF 5進行LEFT OUTER JOIN不必要的簡單選擇
using (var DB = new SiteEntities())
{
var test = DB.All<AssessmentItem>();
}
結果在這個SQL查詢,爲什麼是一個連接正在執行?我沒有說根本就無法查詢產品表,並且它導致我有重複數據的問題。我從來沒有見過這種行爲。
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查詢,必須有某種時髦的推理在後臺進行。我仍然想知道是否有人對此有任何想法。
我想你的導航屬性'產品'在你的'AssessmentItem'中 –
只有一個單獨的'虛擬產品'哈姆雷特,添加了代碼示例 – GONeale