[Windows Azure SQL] 存在しないデータを読み取ろうとしました
ふと、こんなエラーが出た。
長時間接続すると切断されるし、セッション数が超えていても切断される。
その結果として上記のようなエラーがログに残されるわけだが、これは問題の切り分けをするときに間違えやすい。
例えばこのソースは、Azure 環境でなければ普通に動くだろう。
何も考えていないで作ってきたのだが、そういう部分もしっかりと基本に忠実に作らないといけないのだ。
参考:http://stackoverflow.com/questions/5310764/entity-framework-invalid-attempt-to-read-when-no-data-is-present-with-large
System.AggregateException: 1 つ以上のエラーが発生しました。 ---> System.InvalidOperationException: 存在しないデータを読み取ろうとしました。Azure 上の SQL Server で思ったのは、接続に関して Azure から切断されるような作りをしていないかというところだと思う。
長時間接続すると切断されるし、セッション数が超えていても切断される。
その結果として上記のようなエラーがログに残されるわけだが、これは問題の切り分けをするときに間違えやすい。
例えばこのソースは、Azure 環境でなければ普通に動くだろう。
using (var db = new DBEntities()) { var users = (from u in db.Users where u.PK == userid select u).ToList(); if (users.Any()) { var selectedUser = users.Single(); if (selectedUser.Password.Equals(passwordHash)) { var settings = (from s in db.Settings where s.User == selectedUser.PK select s).ToList(); } } }しかし、DBEntities の中でひたすらにループを回し続けると、Azure から切断されてしまうことがある。Azure 上では、常に短い時間でデータベースアクセスを行い、かつ、切断をするような作りになっていないとならない。
何も考えていないで作ってきたのだが、そういう部分もしっかりと基本に忠実に作らないといけないのだ。
参考:http://stackoverflow.com/questions/5310764/entity-framework-invalid-attempt-to-read-when-no-data-is-present-with-large