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

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

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

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

C#

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

SQL Server

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

解決済

EntityFrameworkでSELECT時に、DBから取得したデータが古い

locoJr.
locoJr.

総合スコア14

Entity Framework

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

C#

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

SQL Server

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

1回答

1リアクション

0クリップ

403閲覧

投稿2022/08/11 12:46

編集2022/08/11 13:58

前提

EntityFramework(EF6)を使用し、DBからSELECTしDataGridViewへバインドさせています。
一定間隔で自動でSELECT~バインドを繰り返しているのですが、その間にDBのレコードの値を変更してもなぜかSELECTしたデータは変更前のままです。

DBのレコードの値変更は、SSMS(SQL Server Management Studio)で編集する機能から実施しています。
EntityFrameworkにキャッシュしたデータを都度読み出しているのかと思い、SQL Server Profilerで確認しましたが都度SELECTが実行されているようでした。

Contextのインスタンスをコンストラクタやプロパティの初期値などで生成すると古いデータがSELECTされ、バインドする直前に生成すると新しいデータがSELECTされます。
Contextはシングルトンなどで一度生成したら以後はそのまま・・・というような感じだったと記憶があったのですが、想定外の動きをして困っています。
※動き的には先にトランザクションをはってしまっているような感じ。

後者(バインドする直前にインスタンス生成)だと都度コネクション確立などが発生し処理負荷が高くなると考えており、なんとかContextは一度だけ生成して都度新しいデータをSELECTしたいです。

実現したいこと

  • Contextは一度だけ生成して都度新しいデータをSELECTしたい

該当のソースコード

cs

//メンバ変数 private DbContext _context = new DbContext(); private System.Timers.Timer _timer; //コンストラクタ public Frm() { InitializeComponent(); _timer = new System.Timers.Timer() { Interval = 1000, AutoReset = false, SynchronizingObject = this, }; _timer.Elapsed += _timer_Elapsed; } //フォームロード private void Frm_Load(object sender, EventArgs e) { _timer.Start(); } private async void _timer_Elapsed(object sender, ElapsedEventArgs e) { await BindViewAsync(); _timer.Start(); } private async Task BindViewAsync() { List<model.test> tests = await _context.test.Where(r => l.State == 1).ToListAsync(); DataGridView1.DataSource = tests.Select(r => new { ID = r.id, 名前 = r.name }).ToList(); }

試したこと

EntityFramework(EF6)からEntityFrameworkCore3.1へ変更しても同じでした。

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

VS2022
.NET Framework 4.7.2
WinForm
EntitiFramework(EF6)
SQL Server 2019 Express
※SQL Server認証など設定していますが、他は基本的に規定値のままです。

xg63ex2b👍を押しています

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Entity Framework

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

C#

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

SQL Server

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。