EntityFrameworkは使用されている非常に良いORMフレームワークです。今日は、次のデータEntityFrameworkのいくつかのヒント更新を共有したいと思います:
1:更新レコードに新しい新しいエンティティに、いないクエリはデータベースからレコードを更新する方法。
2:同時にエンティティ、一連の操作の実体ナビゲーションプロパティを更新する方法。
3は:どのように実体の一部を実装する最も簡単なコードで更新されます。
1つの レコードを更新するための新しい新しい新しいエンティティ
EntityFrameworkあなたは、レコードが、新しい新しいエンティティをチェックアウトし、それらまたは更新操作を削除しないでくださいな特徴を持っている、唯一のIDは、例外がスローされますが存在しない場合は、エンティティにIDを提供する必要があります。これは、すべての後に、パフォーマンスを向上させるデータベース・アクセスの削減に役立ちます。更新レコードに新しいエンティティを達成するために、あなたはEF変更トラッカーは、エンティティを追跡できるようにする必要があり、エンティティは次のようにそれは、限り、エンティティがライン上の修正状態変化であるとして、データベースから取り出されると考えています。
1 context.Entry <TEntity>(エンティティ).State = EntityState.Modified。 2 context.SaveChanges()。
ナビゲーション属性エンティティを更新する2操作
が更新属性エンティティで動作しながらナビゲートする方法を説明するための例と。2種類があると仮定
パブリッククラスカスタマー
{
パブリック文字列ID {GET、SET;}
パブリック文字列名前{GET、SET;}
公共のIList <CustomerAddress> {GET CustomerAddresses; SET;}
}
パブリッククラスCustomerAddress
{
公共の文字列の市{GET、SET;}
パブリック文字列は、郵便番号{GET、SET;}
パブリック文字列のCustomerId {GET、SET;}
公共のカスタマーカスタマー{GET、SET;}
}
顧客を更新する方法を同時に追加することを?CustomerAddressとCustomerAddress Deleteキーポイントは、それが存在CustomerAddressの変更トラッカー意識EntityFrameworkようにすることです、ちょうど顧客の追加を追加するためにライン上で動作し、以下のように、コードは次のとおりです。
1 公共 ボイド変更(Customerエンティティ、CustomerAddressアドレス) 2 { 3 context.Customer.Add(エンティティ) 4 5 // 修改カスタマー 6 context.Entry(エンティティ).State = EntityState.Modified。 7 8 // 新增CustomerAddress 9 なら(......) 10 { 11 entity.CustomerAdresses.Add(アドレス)。 12 } 13 14 // 删除CustomerAddress 15 であれば(.......) 16 { 17 context.Entry(アドレス).State = EntityState.Deleted。 18 } 19 context.SaveChanges()。 20 }
あなたはこのコード行は、例外がスローされますcontext.Customer.Add(エンティティ)をコメントアウトした場合、これは注目すべきです。
図3は、エンティティの部分更新を達成し
、問題は、エンティティのプロパティを横断するリフレクションを使用して、友人は庭のEntityframework実体部分更新を話をしているしていると思われる前に、エンティティはあなたが目的を達成することができますので、変更に状態を変更する属性が、これをもう少しコードを書くが、完全に2行のコードを取得するには、実際には、非常に単純なEntityframeworkの特性を利用しません。
1 /// <まとめ> 2 /// アップデートの実質的な部分 。3 /// </要約> 4 /// ます。<param name = "originalEmployee"> エンティティが変更される。</ PARAM> 。5 /// ます。<param name = "のnewEmployee"> 新しいエンティティ</ PARAM> 6。 公共 ボイド変更(originalEmployee従業員、従業員のnewEmployee) 7。 { 8。 context.Entry(originalEmployee).CurrentValues.SetValues(のnewEmployee) 。9 context.SaveChanges(); 10 }
キーは、エンティティへの新しいエンティティの元の値の値は、我々は、我々は真実を理解することができ、この方法のためCurrentValues.SetValues()のソースコードを見ることができることを意味し、コードの最初の行です。クエリを実行するとき、あなたはそれが更新の一部であったかどうかを確認するためのSQLServerプロファイラを開くことができます。エンティティが新しいエンティティがある場合、どのようにそれを更新するには?それとも、それはありますEntityFrameworkを知って取得、それの状態が変わらずに設定されている古い方法はいずれの場合に統合することができ、次のように、マージされたコードは次のとおりです。
公共 のボイドの変更(従業員originalEmployee、従業員のnewEmployee) { もし(context.Entry(originalEmployee).State!= EntityState.Unchanged) context.Entry(originalEmployee).State = EntityState.Unchanged。 context.Entry(originalEmployee).CurrentValues.SetValues(のnewEmployee)。 context.SaveChanges(); }
実際には、今日は、データベースを更新するための新たな新しいエンティティすべては言っても、キーは変更の目的、およびすべてのこのセットEntityStateジョブを達成するように、新しいエンティティを追跡EF変更トラッカを取得することです。
なお列挙型であるEntityStateは、不変が追加、削除されたが、そこDETACHED修飾表す5つの値:エンティティが追跡されず、どのような操作は無効となり、エンティティが、データベースにまだ存在していないが変更され、エンティティこれは、データベースではありませんが、データベース内のエンティティを追跡し、削除対象としてマーク、のSaveChangesアクションは、エンティティを削除します。データベース内のエンティティと修正としてマークされ、SaveChangesをエンティティの動作を変更します。
1:更新レコードに新しい新しいエンティティに、いないクエリはデータベースからレコードを更新する方法。
2:同時にエンティティ、一連の操作の実体ナビゲーションプロパティを更新する方法。
3は:どのように実体の一部を実装する最も簡単なコードで更新されます。
1つの レコードを更新するための新しい新しい新しいエンティティ
EntityFrameworkあなたは、レコードが、新しい新しいエンティティをチェックアウトし、それらまたは更新操作を削除しないでくださいな特徴を持っている、唯一のIDは、例外がスローされますが存在しない場合は、エンティティにIDを提供する必要があります。これは、すべての後に、パフォーマンスを向上させるデータベース・アクセスの削減に役立ちます。更新レコードに新しいエンティティを達成するために、あなたはEF変更トラッカーは、エンティティを追跡できるようにする必要があり、エンティティは次のようにそれは、限り、エンティティがライン上の修正状態変化であるとして、データベースから取り出されると考えています。
1 context.Entry <TEntity>(エンティティ).State = EntityState.Modified。 2 context.SaveChanges()。
ナビゲーション属性エンティティを更新する2操作
が更新属性エンティティで動作しながらナビゲートする方法を説明するための例と。2種類があると仮定
パブリッククラスカスタマー
{
パブリック文字列ID {GET、SET;}
パブリック文字列名前{GET、SET;}
公共のIList <CustomerAddress> {GET CustomerAddresses; SET;}
}
パブリッククラスCustomerAddress
{
公共の文字列の市{GET、SET;}
パブリック文字列は、郵便番号{GET、SET;}
パブリック文字列のCustomerId {GET、SET;}
公共のカスタマーカスタマー{GET、SET;}
}
顧客を更新する方法を同時に追加することを?CustomerAddressとCustomerAddress Deleteキーポイントは、それが存在CustomerAddressの変更トラッカー意識EntityFrameworkようにすることです、ちょうど顧客の追加を追加するためにライン上で動作し、以下のように、コードは次のとおりです。
1 公共 ボイド変更(Customerエンティティ、CustomerAddressアドレス) 2 { 3 context.Customer.Add(エンティティ) 4 5 // 修改カスタマー 6 context.Entry(エンティティ).State = EntityState.Modified。 7 8 // 新增CustomerAddress 9 なら(......) 10 { 11 entity.CustomerAdresses.Add(アドレス)。 12 } 13 14 // 删除CustomerAddress 15 であれば(.......) 16 { 17 context.Entry(アドレス).State = EntityState.Deleted。 18 } 19 context.SaveChanges()。 20 }
あなたはこのコード行は、例外がスローされますcontext.Customer.Add(エンティティ)をコメントアウトした場合、これは注目すべきです。
図3は、エンティティの部分更新を達成し
、問題は、エンティティのプロパティを横断するリフレクションを使用して、友人は庭のEntityframework実体部分更新を話をしているしていると思われる前に、エンティティはあなたが目的を達成することができますので、変更に状態を変更する属性が、これをもう少しコードを書くが、完全に2行のコードを取得するには、実際には、非常に単純なEntityframeworkの特性を利用しません。
1 /// <まとめ> 2 /// アップデートの実質的な部分 。3 /// </要約> 4 /// ます。<param name = "originalEmployee"> エンティティが変更される。</ PARAM> 。5 /// ます。<param name = "のnewEmployee"> 新しいエンティティ</ PARAM> 6。 公共 ボイド変更(originalEmployee従業員、従業員のnewEmployee) 7。 { 8。 context.Entry(originalEmployee).CurrentValues.SetValues(のnewEmployee) 。9 context.SaveChanges(); 10 }
キーは、エンティティへの新しいエンティティの元の値の値は、我々は、我々は真実を理解することができ、この方法のためCurrentValues.SetValues()のソースコードを見ることができることを意味し、コードの最初の行です。クエリを実行するとき、あなたはそれが更新の一部であったかどうかを確認するためのSQLServerプロファイラを開くことができます。エンティティが新しいエンティティがある場合、どのようにそれを更新するには?それとも、それはありますEntityFrameworkを知って取得、それの状態が変わらずに設定されている古い方法はいずれの場合に統合することができ、次のように、マージされたコードは次のとおりです。
公共 のボイドの変更(従業員originalEmployee、従業員のnewEmployee) { もし(context.Entry(originalEmployee).State!= EntityState.Unchanged) context.Entry(originalEmployee).State = EntityState.Unchanged。 context.Entry(originalEmployee).CurrentValues.SetValues(のnewEmployee)。 context.SaveChanges(); }
実際には、今日は、データベースを更新するための新たな新しいエンティティすべては言っても、キーは変更の目的、およびすべてのこのセットEntityStateジョブを達成するように、新しいエンティティを追跡EF変更トラッカを取得することです。
なお列挙型であるEntityStateは、不変が追加、削除されたが、そこDETACHED修飾表す5つの値:エンティティが追跡されず、どのような操作は無効となり、エンティティが、データベースにまだ存在していないが変更され、エンティティこれは、データベースではありませんが、データベース内のエンティティを追跡し、削除対象としてマーク、のSaveChangesアクションは、エンティティを削除します。データベース内のエンティティと修正としてマークされ、SaveChangesをエンティティの動作を変更します。