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

0

関係の反対側から画像を追加してみることができます。

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