尝试循环通过Azure表中的实体时出错

本文关键字:实体 出错 Azure 循环 | 更新日期: 2023-09-27 18:29:27

我一直收到这个错误,"当前值‘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 
        }

尝试循环通过Azure表中的实体时出错

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

如果错误发生在foreach中,如您在代码注释中所述,那么我将检查UserDetailsEntity对象是如何设置的。可能有一个属性设置为布尔值,但您的数据返回为String.Empty。您在foreach中获得此属性的原因是,您的LINQ查询的类型为IQueryable,因此在您(通过foreach)实际访问数据之前,它不会实际执行和填充您的对象*。因此,您可以在UserDetailsEntity属性中放置断点,以查看它是哪一个,如果这不是从代码中显而易见的。

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