Pages

2012/11/12

[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
Related Posts Plugin for WordPress, Blogger...