C#Entity Frameworkのデータを更新するには、3つの方法です

例:

エンティティクラス:

    パブリッククラス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

おすすめ

転載: www.cnblogs.com/nimorl/p/11811714.html