ふと、こんなエラーが出た。
長時間接続すると切断されるし、セッション数が超えていても切断される。
その結果として上記のようなエラーがログに残されるわけだが、これは問題の切り分けをするときに間違えやすい。
例えばこのソースは、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