4

MVCでEntity Framework(最初にデータベースを使用したDbContext)を使用しています。ユーザーがフォームから保存すると、私の内部フラグに応じて、エンティティを挿入メソッドの更新に送信する条件がコントローラーに設定されます。

エンティティを更新メソッドに送信するときに、変更済みのフラグを使用してフラグを立て、context.Entry(myEntity).State = EntityState.Modified;saveChanges() を呼び出すと、すべてがうまく機能します。

エンティティを挿入メソッドに送信するときは、added using にフラグを立てますcontext.Entry(myEntity).State = EntityState.Added;が、saveChanges() を呼び出すと、必要な 2 つのフィールドに関するエラーが表示されます...

問題は、これらの2つのフィールドが空ではなく、保存する直前に有効なデータが効果的に含まれていることです...保存する直前に、これらの2つのフィールドに新しい値を強制しようとしましたが、同じエラーです。

Devart DotConnect For PostgreSQL を db プロバイダーとして使用していることを言及しておくと便利です。

この問題をデバッグする方法はありますか?

編集:

エラーは次のとおりです。

1 つ以上のエンティティの検証に失敗しました。詳細については、「EntityValidationErrors」プロパティを参照してください。

この EntityValidationErrors を探すと、次の 2 つの特定のエラーが表示されます。

flg_actif フィールドは必須です

user_creation フィールドは必須です

前述したように、これらのフィールドは保存する直前にデータが入力されているため、何が起こっているのかわかりません。

私はEF v4.0.30319を使用しています(system.data.entity => v4.0およびEntityFramework => v4.4)

EDIT2: もう少し明確にするために: 挿入しようとしているエンティティは、データベースに既に存在します。フォームには、このデータベース行のデータが表示されます。保存するとき、行を更新するかどうかを決定します (これはうまくいきます) が、データベースの変更履歴を保持するために、編集した行を更新するのではなく、新しいレジスタとして挿入する必要がある場合があります。

4

1 に答える 1

2

保存しようとしているアイテムでEntityKeyプロパティが設定されているかnullであるかを確認できますか?

すでにキーがある場合、コンテキストはすでにアイテムを認識しているため、状態を手動で追加するように設定する代わりに、添付を使用する必要があります。

編集:下からポイントを要約します。すでにコンテキストに関連付けられている行の新しいコピーを挿入しているようです。それはほぼ間違いなくあなたの問題です。元の行に基づいて新しいオブジェクトを作成してみて(つまり、変数値をコピーするか、コピーコンストラクターを使用して)、その新しいオブジェクトを追加します。

さらに、新しく追加されたオブジェクトに手動で状態を設定する必要はありません。コンテキストがそのアイテムを新しいアイテムとして認識しないため、ここで状態を強制しようとしています。

于 2012-11-02T14:00:15.740 に答える