0

別のビジネスロジッククラスを使用してデータベースからデータオブジェクトを取得しています。

public partial class HelperUsers
{
    public User GetUser(string Username, string Password)
    {

        using (var myEntities = new BusinessLogic.Entities())
        {
            var query = (from u in myEntities.Users
                         join link in myEntities.linkUserPhoneNumbers on u.UserId equals link.UserId
                         join p in myEntities.PhoneNumbers on link.PhoneNumberId equals p.PhoneNumberId
                         where u.UserName == Username && u.Password == Password
                         select u).ToList();



            if (query.Any())
                return (User)query[0];
        }
        return null;

    }
}

ただし、これは私の通話ページで使用する場合はうまく機能します

  protected void btnLoad_OnClick(object sender, EventArgs e)
  {
        HelperUsers helper = new HelperUsers();
        var myUser            helper.GetUser("username", "password")
        // This works fine 
        lblUserName.Text =  myUser.Username
        // If i try to read one of the child objects from the join it returns an error
        if (myUser.linkUserPhoneNumbers.Any())
        {
            //do something
        }
  }

私が得るエラーは

 The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

誰もがこれを回避する方法を知っているので、ユーザーオブジェクトのすべての情報にアクセスできます。

4

1 に答える 1

2

この宣言を使用する場合:

using (var myEntities = new BusinessLogic.Entities())

その後、linkUserPhoneNumbersがロードされず、コンテキストが破棄されるため、myUser.linkUserPhoneNumbers.Any()を使用できなくなります。linkUserPhoneNumbersをクエリに含めるか、コンテキストを破棄しないようにする必要があります。ここを見てください:http://msdn.microsoft.com/en-us/library/bb896272.aspx

于 2012-07-18T09:57:39.523 に答える