Entry()
StackOverflow here で説明されているように、DbContext メソッドを使用して変更されたフィールドのみを更新しようとしています。
フィールドでこれを実行すると、Name
すべてStartDate
が完全に実行され、SQL UPDATE ステートメントには、エンティティのすべてのフィールドではなく、更新手順に Name と StartDate のみが含まれますが、子オブジェクトのプロパティも更新しようとすると、Company.TradingName
この例外を受け取ったとき:
「プロパティ パス 'Company.TradingName' のプロパティ 'Company' は、タイプ 'フランチャイズ' の複雑なプロパティではありません。プロパティ パスは、最終的なプロパティを除くすべての複雑なプロパティで構成する必要があります。」
私のコードは、次のようにフィールドの文字列配列 ( new[] {"Name", "StartDate", "Company.TradingName"}
)を単純に繰り返し処理します (item
私のプロパティが属するフランチャイズ エンティティはどこですか):
foreach (var propertyName in changedPropertyNames)
{
_context.Entry(item).Property(propertyName).IsModified = true;
}
何か案は?複雑なプロパティの更新は、EF ドキュメントの「複雑なプロパティの現在または元の値の取得と設定」セクションに記載されているドキュメントに従って機能する必要があります。
要求されたモデル (EF5 によって生成):
public partial class Franchise
{
public System.Guid Id { get; set; }
public string Name { get; set; }
public System.DateTime StartDate { get; set; }
public virtual Company Company { get; set; }
}
Company
モデルも非常に単純で、公開文字列 Name、TradingName、およびその他のいくつかだけです。私が思うに干渉できる不吉なものは何もありません。