0

セットアップ:

製品オブジェクトを更新するために収集される多くのフィールドを持つ大きなフォームがあります。したがって、ASPX ページで、ユーザーは更新が必要なフィールドを変更し、送信を押します。コード ビハインドでは、次のようなことを行います。

Dim p as New MyCompany.Product()
p = p.GetProductById(ProductID)

Linq の Product 部分クラスを SQL に拡張して、このメソッド (GetProductById) をオブジェクトに追加します。

p.Name = txtName.Text
p.SKU = txtSKU.Text
p.Price = txtPrice.Text
...    
p.Update()

これは、拡張された Product 部分クラスの Update メソッドです。データベースを更新し、電子メールを送信し、履歴テーブルを更新するので、このメソッドでこれらすべてを実行したいと考えています。

プロジェクトにはさらに 50 個のフィールドがあるため、50 個のフィールドすべてを収集するメソッドを作成するのはばかげていることは明らかです (IMO をデバッグするのが難しいため、とにかくそのルートには行きたくありません)。

問題:

DataContext を使用して Linq to SQL 経由で Product を取得すると、別の DataContext に既にアタッチされているエンティティをアタッチできないというエラーが発生するため、再度更新することはできません。

質問:

BLL のメソッドを介してオブジェクトを取得し、ASPX ページで更新してから、BLL を介して更新を再度送信してデータベースを更新しようとすると、どうすればよいですか?

4

1 に答える 1

0

LINQ-to-SQL を使用するかどうかに関係なく、私は次のことを行います。送信時に、アイテムを検索し (PK を使用して単一のアイテムであれば迅速なはずです)、DAL がデータ オブジェクトを返し、リフレクションを使用してページ内の各要素をデータ オブジェクト内の対応するプロパティにマップします。私の DAL は、変更されたアイテムのみを更新します。

あなたがしなければならないことは同じで、すべての価値を集めて提出することだと思います。LinqToSql が、何が変更されたかを判断するのに十分なほど賢くない場合は、最良の代替手段ではない可能性があります。

于 2009-03-02T02:42:24.967 に答える