你如何在 Xamarin 的 firebase 中使用 PutAsync()

问题描述

注意:我有一个解决方案,但我将把这段代码留给建设性的批评/帮助,以帮助其他可能为此而苦苦挣扎的人。

嗨,我已经在 github/firebase api 上搜索了表单/示例,但没有找到任何关于我正在做的事情。这应该很简单,我只需要一个如何实际操作的示例。 (第一次使用 firebase,过去只使用过 sql

我有一个 firebase 实时数据库,下面是注​​册新用户/驱动程序的函数

public async Task<bool> RegisterNewDriver(string licenceno,string companyname,string vatno,string wasteno )
{
    var result = await firebase
       .Child("RegisterDriverTable")
       .PostAsync(new RegisterDriver() {
         DriverId = Guid.NewGuid(),CompanyName = companyname,VatNo = vatno,WasteNo = wasteno }) ;
    if (result.Object != null)
        return true;
    else
        return false;
}

我想要做的是更改一个变量,即如果用户的 CompanyName 更改,我希望能够更新数据库中的记录 - 更新 CompanyName 属性而不影响其他孩子,如 vatno 或 wasteno。

我已经试过了:

await firebase
    .Child("RegisterDriverTable")
    .Child(toUpdateDriver.Key)
    .PutAsync(new RegisterDriver()
    {              
         CompanyName = "A Generic Company Inc";       
    }); 

但这只会覆盖驱动程序的详细信息。

我目前正在做的只是手动完成:

     var toUpdateDriver = (await firebase
                        .Child("RegisterDriverTable")
                        .OnceAsync<RegisterDriver>()).Where(a => a.Object.Fk_UserId == (System.Guid)App.Current.Properties["UserGuid"]).FirstOrDefault();

   if (toUpdateDriver != null) {
    var entry = new RegisterDriver() { DriverRange = range };
         await firebase
         .Child("RegisterDriverTable")
         .Child(toUpdateDriver.Key)
         .PutAsync(new RegisterDriver()
         {
            DriverId = toUpdateDriver.Object.DriverId,LicenceNo = toUpdateDriver.Object.LicenceNo,CompanyName ="A Generic Company Inc",VatNo = toUpdateDriver.Object.VatNo,WasteNo = toUpdateDriver.Object.WasteNo,}); 
     }

它有效,但它有很多冗余。

有谁知道如何在 Xamarin 中执行此操作,或者是否有人可以向我指出如何正确使用 PutAsync 的示例?

感谢任何帮助?

解决方法

在输入这个问题后立即想到了一个解决方案?。我已经修改了上面的代码,效果很好。我仍然会向任何可能发现此代码有用的人发布问题。

    public async Task<bool> UpdateDriverRange2(int range)
{
    var toUpdateDriver = (await firebase
    .Child("RegisterDriverTable")
    .OnceAsync<RegisterDriver>()).Where(a => a.Object.Fk_UserId == (System.Guid)App.Current.Properties["UserGuid"]).FirstOrDefault();

    if (toUpdateDriver != null)
    {
        toUpdateDriver.Object.CompanyName = "A Generic Company Inc";
        await firebase
           .Child("RegisterDriverTable")
           .Child(toUpdateDriver.Key)
           .PutAsync(toUpdateDriver.Object);
        return true;
    }
    else
        return false;
}