最近、EFはネストされたオブジェクトを更新しないことを発見しました。 数日間、私はこれを行う方法を理解しようとしますが、残念ながら私はこの問題に固執しています。Entity Frameworkでネストされたオブジェクトを更新する
私は、Objectその後
public class ProjectEntity : AuditableEntity<int>
{
public string CustumerCompany { get; set; }
public string CustomerRepresentative { get; set; }
public string ProjectTitle { get; set; }
public string WwsNumber { get; set; }
[ForeignKey("ParentProjectId")]
public virtual ProjectEntity ParentProject { get; set; }
public int? ParentProjectId { get; set; }
public virtual ICollection<ProjectServicesEntity> Service { get; set; }
}
サービス対象
public class ProjectServicesEntity : AuditableEntity<int>
{
/// <summary>
/// Service Number
/// </summary>
public int Number { get; set; }
/// <summary>
/// Service Name
/// </summary>
public string Name { get; set; }
/// <summary>
/// Positions
/// </summary>
public virtual ICollection<ProjectPositionsEntity> Positions { get; set; }
[ForeignKey("ProjectId")]
public virtual ProjectEntity Project { get; set; }
public int ProjectId { get; set; }
}
と体位オブジェクトを持っている:
public class ProjectPositionsEntity : AuditableEntity<int>
{
/// <summary>
/// Position number
/// </summary>
public int Number { get; set; }
/// <summary>
/// Position Name
/// </summary>
public string Name { get; set; }
/// <summary>
/// Organization Unit for position
/// </summary>
public virtual ICollection<ProjectsOutsourcedPositionEntity> OrganizationUnit { get; set; }
/// <summary>
/// Represents if position is outsourced
/// </summary>
public bool OutSource { get; set; }
/// <summary>
/// Comments for position
/// </summary>
public string Remarks { get; set; }
[ForeignKey("ServiceId")]
public virtual ProjectServicesEntity Service { get; set; }
public int ServiceId { get; set; }
}}
そして、私の更新方法:
public void Update(T entity)
{
DbContext.Entry(entity).State = EntityState.Modified;
DbContext.SaveChanges();
}
すべてのデータが表示されていたときに、サービスまたは位置情報の一部のデータを編集しようとすると、更新されませんでした。 誰もこの種の問題を抱えていましたか?
私が見たすべての例は、深さが1レベルのネストされたオブジェクトでのみ表示されていましたが、私のオブジェクトには2レベルのネストがあります。
変更がページからサーバーに届いていますか?テストハーネス(コンソールアプリケーション)でこれを試しても、同じ動作をしますか?たとえば、いくつかのデータを読み込んでオブジェクトを変更し、保存する小さなコンソールアプリケーションを作成します。保存は機能しますか? –
私はあなたが切断されたオブジェクトについて話していると思います。それは決してEFによって対処されていません、あなたは[GraphDiff](https://www.nuget.org/packages/RefactorThis.GraphDiff)パッケージを見ることができます。 –
@AdamBensonはい、確信しています。問題は、EFはModifiedとマークされたEFオブジェクトのみを更新し、この状態は子オブジェクトには適用されないということでした。だから私は彼らのために変更を設定する必要があります。 私のソリューションを掲載しました –