[Windows Azure SQL] 存在しないデータを読み取ろうとしました

ふと、こんなエラーが出た。
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

このブログの人気の投稿

Excel で入力した文字に勝手に取り消し線が入る

コピーした行の挿入が表示されない時はフィルタされていないかチェック