2009-07-22 13 views
1

まず、データベースからエンティティをロードせずにエンティティを更新したいとします。ADO.net Entity Framework:分離されたエンティティのcertianプロパティのみを更新する

私はこれを達成しましたが、すべてのエンティティのプロパティを知ってから、 "attachto"メソッドを使用するだけです。

私の問題は、私のアプリがすべてのプロパティを覚えておく必要はありません。例:

Dim customerEntitiy As New shopper 
customerEntitiy.shopper_id = CustomerData.CustomerID 
customerEntitiy.market_code = CustomerData.MarketSector 
customerEntitiy.email = CustomerData.Email 
customerEntitiy.modified = DateTime.Now 
context.AttachTo("shopper", customerEntitiy) 
context.SaveChanges() 

このエンティティには、「作成済み」フィールドもあります。私は、この「作成された」日付を、n層のアプリを通してずっと伝えたくありません。データベースに保存するときに、どうすればそのフィールドを「更新しない」ことができますか?ありがとう! ポール

+0

、それがお奨めではないです。たとえば、ビューに関連付けられたエンティティを使用し、プロシージャを使用して更新します。このアプローチは非常に望ましくない効果を持っています... –

答えて

3

私はそれを理解しましたが、基本的にスタブを使用して添付し、更新したい小道具だけを設定します。エンティティフレームワークは変更されたものだけを更新します。

Dim customerEntitiy As New commerce_shopper 
customerEntitiy.shopper_id = CustomerData.CustomerID 'this is the primary key' 
context.AttachTo("commerce_shopper", customerEntitiy) 
customerEntitiy.market_code = CustomerData.MarketSector 
customerEntitiy.email = CustomerData.Email 
customerEntitiy.modified = DateTime.Now 
context.SaveChanges() 

これは、「作成された」日付フィールドをバイパスします。この記事では

+0

この文脈で「スタブ」の意味を教えてください。私たちも同じ問題を抱えており、どのように解決したのかを知りたいと思います。 – publicgk

+0

基本的には、新しいdbオブジェクトを作成し、それに主キー(.shopper_id = PK)を割り当て、AttachToを使用してコンテキストに配置します。あなたのものを変更し、保存を押してください。 –

0

変更を保存してエンティティを更新することはできませんが、最初にデータベースからロードすることはできません。あなたが持っているコードは、更新ではなく、insert文を生成します。

spesified filedsのみを更新するストアドプロシージャを使用して、何をしようとしているのかを確認できます。

+0

私は代わりにLinqを介してこれを行うことができますか? –

+0

LinqをSQLに使用していませんが、同じ問題に遭遇すると思います。 –

関連する問題