尝试循环通过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
}
如果没有更多的代码,我无法告诉您问题的确切位置,但异常是很有解释性的。您正试图将布尔属性设置为字符串的值。
如果错误发生在foreach中,如您在代码注释中所述,那么我将检查UserDetailsEntity
对象是如何设置的。可能有一个属性设置为布尔值,但您的数据返回为String.Empty。您在foreach中获得此属性的原因是,您的LINQ查询的类型为IQueryable,因此在您(通过foreach)实际访问数据之前,它不会实际执行和填充您的对象*。因此,您可以在UserDetailsEntity属性中放置断点,以查看它是哪一个,如果这不是从代码中显而易见的。
*请记住,这是N+1问题,在循环的每次迭代中都要调用数据库。您可以通过调用.ToList()将所有数据一次加载到查询中来解决此问题。。。如果这对你来说是个问题,那就是.