2011-02-08 9 views
0

ASP.NETアプリケーションでObjectDataSourceを使用します。Entity Framework 4の2つのエンティティ間のマージ変更

ASPxGridViewの使用。更新すると、データアクセスレイヤーに戻り、エンティティを更新しようとします。エンティティが更新メソッドに到着したときに、いくつかのプロパティ(Columns、Visible = false)を持つときに見ることができるように、visible = falseカラムに値はありません。

私はすべての列を表示したくありません...私は30列のうちの3つが必要な場合はどうしますか?だから私は、コンテキストから元のエンティティを取得し、更新されたエンティティからの違いをマージすると思った。

これがEntity Frameworkを使用して発生する可能性はありますか?または任意の():)

あなたは切り離さエンティティを使用していて、唯一の選択したプロパティを変更

答えて

1

ありがとう=>あなたはプロパティが変更されたとあなたから値をコピーするコードを記述しなければならないかを知っているだけですこれらのプロパティは更新されたエンティティになります。選択したプロパティの更新にはさまざまな方法があります。simple approachを使用するか、repositoryをビルドすることができます。

編集:あなたはObjectDataSourceに更新を呼び出すときにオブジェクト全体を取得したい場合は

あなたは(クライアントに)グリッドにオブジェクト全体を渡す必要があります。これは、すべてのオブジェクトプロパティをいくつかのコントロールにバインドしたことを意味します。簡単な方法はHiddenFieldのコントロールを使用することです。しかし、隠されたフィールドの場合、望ましくない更新をもたらす投稿された値をユーザーが変更しないことを確信することはできません。たとえば、製品価格を非表示フィールドに転記するとします。ユーザーがツールを使用してリクエストを傍受し、価格を変更した場合、それをデータベースに更新します。

もう1つの方法は、プレーンな隠し入力の代わりにViewStateに値を格納するカスタムWebコントロールを作成することです。

+0

グリッド行のデータソースオブジェクト全体を取得するのが最善で効率的な方法だと思います。これは少なくとも自動的に発生するはずです。 Updateを押すと、ObjectDataSourceはTオブジェクト全体を渡すUpdate(Tエンティティ)に移動します。これは最も簡単なはずです:)これはどのようにすることができますか?何か案が? –

+0

@ George:私は答えにいくつかの情報を追加しました。 –

関連する問題