2011-12-08 7 views
0

class PersonModelとし、ブラウザで詳細フォームを編集し、submitボタンを押したとします。 UPDATE SqlComand(NO EF)を作成し、変更されたclass PersonModelFirstName, LastName, Age...)からのみそれらのフィールドを更新するために、コントローラ・ロジックを作成する方法ASP.NET MVC3は必要なフィールドのみを更新します

/Person/Edit/<id>コントローラの引数にはどのようなものがありますか?

+3

なぜORMを使用していませんか?それはあなたのためにこれすべてを処理するので、この日と年齢ではばかげています。あなたは、ORMが過剰であると思ってプロジェクトを開始することができます。そして、それが進むにつれて、このようにしてより多くのコードを書くことになります。 –

答えて

2

MVCコードに特別なことはしません。特別なURLパラメータは追加しません。

変更したフィールドのみを更新する場合は、多くのコードを書き込む必要があります。あなたは現在のレコードを取得し、それぞれのモデルフィールドをレコードフィールドと比較し、どのフィールドが変更されたのか把握してから、変更されたフィールドに基づいてSQL文を作成し、更新し、optomisticレコードフィールドを取得したときと更新したときの間でフィールドが変更されていないことを保証するためにロックします。

おそらく数百行のコードになるでしょう。 ORMを使用している場合は、1行のコードにすることもできます。

また、SQLインジェクション攻撃(ORMでも無料で入手できるもの)を防ぐために、パラメータ化された文を使用する必要があることに注意してください。

幸い、私は確かにそれを書くつもりはありません。

0

Linqを使用して、datacontextですべてのことを行うことができます。 モデルでは、更新のためのlinqクエリを使用してデータクラスを作成し、オブジェクトを取得し、取得したオブジェクトのビューから渡されたすべての値を設定します(これは、パターンはモデルからビューを切り離すので、MVCはオブザーバを実装してモデルの変更を知っているので、コントローラのビューで変更された内容を知ることはできません。 DataContext.SubmitChanges();方法。データコンテキストは、それ自体で仕事をします。何を変更して変更するかを知り、最もパフォーマンスの高いクエリを作成します。

+0

彼はEntity Frameworkを使用していないと述べています(私は他のORMは想定していません)、SqlCommandを使用してSQL文を生成したいとします。 –

+0

LinqはEFではありません! – JuanC

+0

また、Linq!= Linq to SQL – thiagoleite

1

私がお勧めするのは、データモデルの1:1表現であると仮定した一般化PersonModelを使用しないことです。気になるフィールドだけを使って、ウォータードダウンビューモデルを作成する必要があります。次に、AutoMapperのようなものを使ってViewModelをあなたのDomainModelにマップし直します。

ここでは、このようなシナリオでAutoMapperを使用する方法について説明します。

How to cross map objects using AutoMapper

関連する問題