質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Entity Framework

Entity Frameworkは、.NET Framework 3.5より追加されたデータアクセス技術。正式名称は「ADO.NET Entity Framework」です。データベースエンジンに依存しておらず、データプロバイダの変更のみで様々なデータベースに対応できます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

解決済

AzureSQLServer利用時のトランザクション・リトライ・catch処理について

merry93
merry93

総合スコア17

Entity Framework

Entity Frameworkは、.NET Framework 3.5より追加されたデータアクセス技術。正式名称は「ADO.NET Entity Framework」です。データベースエンジンに依存しておらず、データプロバイダの変更のみで様々なデータベースに対応できます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

2回答

0リアクション

0クリップ

348閲覧

投稿2022/10/03 00:14

編集2022/10/03 03:26

前提

VS2022、c#、EF6、Azure SQL Serverでよくあるデータベース情報の取得・更新の実装をしています。
(Visual Studio 2022、c#.NET MVC5 アプリを.NET Framework 4.7.2、Entity Framework 6を利用して開発予定(変更の可能性あり)です。)

実現したいこと

更新時のトランザクションやリトライ処理・エラー発生時のcatchについて正しい実装を知りたい。

発生している問題・エラーメッセージ

特になし

該当のソースコード

C#

●リトライ設定 SetExecutionStrategy( "System.Data.SqlClient", () => new SqlAzureExecutionStrategy(10, TimeSpan.FromSeconds(30))); ●更新処理 var executionStrategy = new SqlAzureExecutionStrategy(); executionStrategy.Execute( () => { using (var db = new BooksDbContext()) { try { using (var tran = db.Database.BeginTransaction()) { try { db.Books.Add(new Book { Title = "日本の歴史1", HakkoYear = 2019 }); db.Books.Add(new Book { Title = "日本の歴史2", HakkoYear = 2020 }); db.SaveChanges(); ←① db.Database.ExecuteSqlCommand( "UPDATE Book SET Title = '日本の歴史1_1' WHERE Id = 1" ←② ); db.Books.Add(new Book { Title = "日本の歴史3", PublishedYear = 2022 }); db.SaveChanges(); ←③ tran.Commit(); } catch (SqlException e)[A]SQLに誤りがあった場合等のエラー { Console.WriteLine("SqlException1" + e.ToString()); } } } catch (SqlException e)[B]Azureへの接続自体ののエラー(権限なし等) { Console.WriteLine("SqlException2" + e.ToString()); } } });

試したこと

Azureはリトライ処理が必須とのことで一通り実装しましたが、
トランザクションとリトライとキャッチ処理がバラバラのサンプルを合わせました。
(1)例中の①②③の3回の更新処理でもし一時的なエラーが発生した場合はリトライ設定どおりのリトライを実行してほしい
(2)SQLエラーや致命的な接続でエラーの場合はcatchしてしかるべき処理をして終了させたい
というのが希望の動作です。

それと、このコードで一時エラーの場合のリトライ処理が本当に実行されているか確認する方法が分からないです。
一時的なエラーを故意に作り出すことも難しいような、、。

実装方法や確認方法についてご教授いただけますと幸いです。

補足情報(FW/ツールのバージョンなど)

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

SurferOnWww

2022/10/03 00:29 編集

https://teratail.com/questions/6uwlcqwrrap7qi <= 質問は編集できるので、無駄にスレッドを増やすのではなく、先のスレッドを編集するようにしてください。無駄にスレッドを増やすのは閲覧者の迷惑になると認識してください。やってしまってからでは何ともならないので先のスレッドは運営に削除依頼を出してください。
SurferOnWww

2022/10/03 00:23

何を何で作っているか書きましょう。 (例: Visual Studio 2022 で ASP.NET MVC5 アプリをターゲットフレームワーク .NET Framework 4.8 で作っています)
merry93

2022/10/03 00:30

自宅Wi-Fi不調で対応している間に誤って投稿してしまいました。 投稿削除依頼は提出済みです。本当に申し訳ございません。 Visual Studio 2022、c#.NET MVC5 アプリを.NET Framework 4.7.2、Entity Framework 6を利用して開発予定です。 ※環境調査段階ですので変更の可能性もあります。
SurferOnWww

2022/10/03 00:34

> Visual Studio 2022、c#.NET MVC5 アプリを.NET Framework 4.7.2、Entity Framework 6を利用して開発予定です。 質問欄を編集して、追加情報として追記願います。ここは「質問への追記・編集の依頼」を行う場で、初期画面では閉じているので見ない人も多々います。
SurferOnWww

2022/10/03 02:20

質問のコードのインデントが乱れてます。直してください。インデントされてないコードは質問者さん自身でも読む気がしないのでは? 回答者・閲覧者はなおさらです。
merry93

2022/10/03 03:27

ご指摘ありがとうございます。 やり方がよく分からずでしたが、ソースコードの部分は修正(そもそもコード用の投稿にしていませんでした)しました。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Entity Framework

Entity Frameworkは、.NET Framework 3.5より追加されたデータアクセス技術。正式名称は「ADO.NET Entity Framework」です。データベースエンジンに依存しておらず、データプロバイダの変更のみで様々なデータベースに対応できます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。