複雑な型を持つエンティティをDBContext.ChangeTrackerで変更するにはどうすればよいですか?それは私がクライアントの名前を変更する場合は、...のプリミティブでEntity Frameworkの複合型の変更の追跡
モデル...
public class SalesPerson
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Client
{
public int Id { get; set; }
public string Name { get; set; }
public virtual SalesPerson SalesPerson { get; set; }
}
リポジトリ方法...
public void SaveChanges()
{
var changedItems = _context.ChangeTracker.Entries()
.Where(e => e.State != EntityState.Unchanged)
.ToList();
foreach (var item in changedItems)
{
if (item.State == EntityState.Modified)
{
//Do something
}
}
}
}
だから... ...を正常に動作ChangeTracker(changedItems )は変化を示しています...期待どおりです。
クライアントにセールス担当者を割り当てると、チェンジトラッカーはそれを取得しません。 (EFは複合型の変更を追跡しないため)。
ご協力いただければ幸いです。 @Pawelが正しい方向に私を指摘
エンティティフレームワークは確かに '複合型'を処理します。これは、一般に 'SalesPerson'の娘のテーブルにマップされ、その後、' Client'に戻る関係を持つ別個のエンティティとして追跡されます。しかし、FYI、EFはあなたのすべての変更を保存します。あなたがここで達成しようとしていることを確信していない。 – TheNorthWes
EntityStateが "EntityState.Added"または "EntityState.Modified"のChangeTracker.Entriesから項目を取得しようとしています。 EFはコンプレックスタイプのChangeTrackingをサポートしていないことはかなりよく書かれています – Trenton
これはどこに記載されていますか? 'SalesPerson'はEFコンテキストの一部ではありませんか?なぜそれは 'Client'を追跡するのですが、' SalesPerson'は追跡しません。 – TheNorthWes