例:
エンティティクラス:
パブリッククラスTestDbContext:DbContext { 公共DbSet <試験>テスト{取得します。セットする; } パブリックTestDbContext():ベース(){} } publicクラステスト { 公共長いID {GET。セットする; } パブリック文字列名前{得ます。セットする; } パブリック文字列をEメール{GET。セットする; } パブリック文字列備考{得ます。セットする; } }
データベースを作成します。
DB =新しい新しいTestDbContext TestDbContext(); db.Tests.Add(試験新しい新しい(){NAME = "テスト1"、メール= @ "[email protected] "、備考= " テスト1備考"}); db.Tests .Add(新しいテスト(){名称 = " 試験2"、電子メール= @ "[email protected] "、備考= " テスト2備考"}); db.SaveChanges()。
データの更新方法:
最初のレコードを検索し、[プロパティを変更します。この方法は、複数の問い合わせステップが、その後の操作をより便利に、EFことにより自動追尾機能を利用します。
例えば、生成されたSQL文だけで変更されたフィールドを変更します。
、まだクエリを実行するため:そしてテストと、次のコードのようなSQL文を生成しないエンティティは二回、二時間のSaveChanges()メソッドは、SQL UPDATEステートメント(注を行っていない実行する場合は、プロパティ値を変更しないことが判明していますそのため、作業効率が大幅に改善されていません)
DB =新しい新しいTestDbContext TestDbContext(); VAR db.Tests.Findテスト=(1); test.Remarks = "Updateフィールド法1。"; db.SaveChanges()。
第二の方法:
直接新しいエンティティクラスを作成し、エンティティオブジェクトの状態を変更します。この方法は、以下のクエリステップのが、生成されたSQL文は、すべてのフィールドを変更しますが、また、ID値が存在することを確実にするためけれども。(注:原因は、すべてのフィールドを変更するには、設定されていないフィールドがnullに設定されています)
TestDbContextデシベル=新しいTestDbContext(); テストテスト=新しいテスト(){ID = 1、備考= "更新字段方法2"}。 db.Entry(テスト).State = System.Data.Entity.EntityState.Modified。 db.SaveChanges();
第三の方法:
、エンティティ・クラスを作成し、コンテキストへのデータベース・エンティティをアタッチし、次いで真に対応する修飾識別属性の値を変更し、この方法は、第一の方法と同様に、SQL文を生成し、比較的簡単なだけでなく、少ない問い合わせステップが、後続の操作あまりにも多くの問題、あなたは設定を変更したいので、手動で個々のプロパティを識別するだけでなく、そのそこにID値を確保するために。
TestDbContextデシベル=新しいTestDbContext(); テストテスト=新しいテスト(){ID = 1、備考= "更新字段方法3"}。 db.Tests.Attach(テスト)。 db.Entry(テスト).Property( "解説")と、IsModified = TRUE。 db.SaveChanges();
生成されたSQL文(SQL Serverプロファイラを使用して収入追跡データベース):第一の方法:(注:コードを実行する第一の方法の後に一度実行される)が、再びSQLステートメントを更新するために、データベースを追跡していません
sp_executesqlをN'UPDATE Execの[DBO]。[試験] SET [備考] @ 0 = ([ID] = @ 1) BIGINT @ 0 NVARCHAR(MAX),. 1 @ 'N' 'N 0 = @'更新フィールド1」、1 @ 1 =
第二の方法:(注:SQL文を表示するには)、この方法の使用に注意を払っていない場合は、データがバグ修正される可能性があり、見ることができます
sp_executesqlをN'UPDATE Execの[DBO]。[テスト] [メールで] SET [名前] = NULL、= NULL、[備考] @ 0 = ([ID] = @ 1) 'N' @ 0 NVARCHAR(MAX) 、 '@ 0、1 BIGINT @ = N' 更新フィールド法2」、@ 1 = 1
第三の方法
sp_executesqlをN'UPDATE Execの[DBO]。[試験] SET [備考] @ 0 = ([ID] = @ 1) BIGINT @ 0 NVARCHAR(MAX),. 1 @ 'N' 'N 0 = @'更新フィールド法3」、@ 1 = 1