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()

4

2 回答 2

2

这看起来像延迟加载。当你不需要它(或者当你不想要它时)通过调用关闭延迟加载:

dbContext.Configuration.LazyLoadingEnabled = false;
于 2013-04-03T12:41:29.507 回答
0

您可以尝试从关系的另一端添加图像,例如

db.ProjectImages.Add(new ProjectImage { ProjectLocalisation = localisation, ... }
于 2013-04-03T13:46:50.427 回答