尝试从Azure表中循环实体时出错

时间:2012-03-30 13:18:43

标签: c# azure azure-storage azure-table-storage

我一直收到这个错误,“当前值'String.Empty'类型与预期的'System.Boolean'类型不兼容”,当我尝试从Azure表中循环一堆实体时,我是只是使用Azure的新手,所以这可能是非常容易的,我得到的错误。

我的代码:

private void registerButton_Click(object sender, RoutedEventArgs e)
    {
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("StorageConnectionString"));

        // Create the table client
        CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

        // Get the data service context
        TableServiceContext serviceContext = tableClient.GetDataServiceContext();

        // Create a new customer entity
        user = new UserDetailsEntity();

        //Setting the fields of the new userEntity
        user.username = usernameText.Text;
        user.password = passwordText.Text;
        user.subscriptionID = subText.Text;
        user.subscriptionName = subscriptionNameText.Text;
        user.thumbprint = thumbprintText.Text;
        user.email = emailText.Text;
        user.phoneNumber = "3530" + numberText.Text;


        int rowCount = 1;


        CloudTableQuery<UserDetailsEntity> Query = (from en in serviceContext.CreateQuery<UserDetailsEntity>("userdetails")
                                                             select   en).AsTableServiceQuery<UserDetailsEntity>();

        //error occurs in the next line
        foreach (UserDetailsEntity ent in Query)
        {

            rowCount++;
        }

        user.RowKey = rowCount.ToString();





            // Add the new customer to the people table
            serviceContext.AddObject("userdetails", user);

            // Submit the operation to the table service
            serviceContext.SaveChangesWithRetries();
            //Set the variables so they can be retrieved when the next screen loads
            Application.Current.Properties["username"] = usernameText.Text;
            Application.Current.Properties["password"] = passwordText.Text;

            Window1 userHome = new Window1();
            this.Close(); //to close Password window 
            userHome.Show(); //to show Main form 
        }

1 个答案:

答案 0 :(得分:2)

如果没有更多代码,我无法确切地告诉您问题的确切位置,但异常是相当明确的。您正在尝试将布尔属性设置为字符串的值。

如果你在代码评论中注意到你的foreach中发生了错误,那么我会检查你的UserDetailsEntity对象是如何设置的。可能有一个属性设置为布尔值,但您的数据将作为String.Empty返回。你在foreach中得到这个的原因是因为你的LINQ查询的类型是IQueryable,所以它实际上不会执行并填充你的对象,直到你实际访问数据(由你的foreach)*。因此,您可以在UserDetailsEntity属性中放置断点,以查看在查看代码时不是blatent的那个断点。

*请记住,这是N + 1问题,您在循环的每次迭代中调用数据库。您可以通过调用.ToList()将所有数据一次性加载到查询中来解决此问题...如果这对您来说是个问题,那就是。