1

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、およびその他のいくつかだけです。私が思うに干渉できる不吉なものは何もありません。

4

1 に答える 1

1

Company複雑なプロパティではなくナビゲーションプロパティのように見えるため、点線のプロパティパスを使用してアクセスすることはできません。関連するエンティティのエントリを取得し、それに応じて変更されたプロパティを設定する必要があります。

于 2013-01-10T16:13:44.880 に答える