0
就像標題所說,當我添加的孩子現有的父,所有現有的兒童進行檢索。增加孩子現有的父檢索所有現有兒童
減少/簡化父母和孩子機型:
public class ProjectLocalisation
{
public int ProjectID { get; set; }
public virtual Project Project { get; set; }
public virtual ICollection<ProjectImage> Images { get; set; }
}
public class ProjectImage
{
[Key]
public int ID { get; set; }
public int ProjectID { get; set; }
public virtual ProjectLocalisation ProjectLocalisation { get; set; }
}
- 在創建新的孩子一個新的父,那麼除了該 實際插入在數據庫上完成。
- 當編輯現有的父無需添加新的孩子,但 編輯現有的孩子,除了沒有實際更新數據庫上進行 。
- 當編輯現有的父和增加新的孩子,所有現有的 孩子都從數據庫中檢索。
通過創建類的新實例,設置主鍵和附加對象來完成編輯現有父對象。那一刻此行被執行:執行
projectLocalisation.Images.Add(image);
此查詢:
exec sp_executesql N'SELECT
[Extent1].[ID] AS [ID],
[Extent1].[ProjectID] AS [ProjectID],
[Extent1].[Name] AS [Name],
[Extent1].[Order] AS [Order],
[Extent1].[LanguageTag] AS [LanguageTag]
FROM [dbo].[ProjectImages] AS [Extent1]
WHERE ([Extent1].[ProjectID] = @EntityKeyValue1) AND ([Extent1].[LanguageTag] = @EntityKeyValue2)',N'@EntityKeyValue1 int,@EntityKeyValue2 nvarchar(128)',@EntityKeyValue1=5,@EntityKeyValue2=N'nl'
有什麼辦法禁用此行爲?
編輯:一種解決方法似乎是不會使收集虛擬的,但我寧可不使用.Include()
所有的地方。
我很困惑,爲什麼EF決定它需要加載所有現有的數據。像這樣禁用延遲加載似乎有訣竅。 – Stijn
英孚不做任何決定。這是爲支持延遲加載而生成的代理類的一個特性(它在內部要求EF加載數據)。該類簡單地覆蓋您的屬性並確保首次訪問導航屬性將加載所有數據。添加到收藏仍然是一個訪問。 –
啊,然後懶惰的加載工作稍微不同於我原來的想法。感謝您的額外信息。 – Stijn