azure 从Blazor服务器应用程序对Cosmos数据库执行CRUD操作

qgzx9mmu  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(142)

在我正在开发的Blazor应用程序中,我有执行基本CRUD操作的代码。

<ButtonRowTemplate>
            <Button Color="Color.Success" Clicked="context.NewCommand.Clicked">New</Button>
            <Button Color="Color.Primary" Clicked="context.EditCommand.Clicked">Edit</Button>
            <Button Color="Color.Danger" Clicked="context.DeleteCommand.Clicked">Delete</Button>
            <Button Color="Color.Link" Clicked="context.ClearFilterCommand.Clicked">Clear Filter</Button>
        </ButtonRowTemplate>

代码只在缓存内存(上下文)中工作。更改不会传播到DB。我以前编写的API使用直接更新命令,类似于:

replaceResponse = await this.container.ReplaceItemAsync<T>(itemBody, itemBody.Id, new PartitionKey(itemBody.someID));

我正在尝试该高速缓存/上下文与数据库同步。我尝试使用与上面类似的代码将数据库更新与缓存更新并行绑定,但没有成功。这是否正确,或者是否有一种更串行的方式来更新缓存,然后将这些上下文更改推送到数据库?在某种意义上,提交这些更改。
我还应该补充一点,我正在使用Microsoft. Azure. DocumentDB. Core。我希望在迁移到Microsoft.Azure.Cosmos库之前让代码正常工作。我感谢任何帮助,因为我正在使用Blazor返回前端开发。

dwbf0jvd

dwbf0jvd1#

我有一个解决方案,但我心中的问题是它是正确的吗?更具体地说,有没有更简单的方法来做,比如该高速缓存中提交更改?
我所做的
首先,我对Blazorise Grid组件做了一些深入的研究,其中有一个名为RowInserted的参数,我相信这会在该高速缓存中添加行后触发一个函数。

<DataGrid TItem="PowderInfo"
              Data="@powderlist"
              @bind-SelectedRow="@selectedLoad"
              RowInserted="AddNewDoc"

然后,我向页面代码添加了一个名为AddNewDoc的新函数。

protected async Task AddNewDoc()
    {
        var item = new PowderInfo();
        item = this.powderlist.ElementAt(this.powderlist.Count() - 1);
        item.id = this.powderlist.Count().ToString();
        await getPowderData.AddNewDocument(item);
    }
  • 项目是我的文档类型的示例。
  • powderlist是我本地的缓存。
  • ElementAt获取刚添加的缓存项。
  • item.id使用计数值进行传播。
  • 最后,用新文档调用DAL的AddNewDocument。
public async Task AddNewDocument(PowderInfo item)
        {
            await CosmosDBRepository<PowderInfo>.CreateItemAsync(item, "Powders");
        }

现在我的数据库更新了。但是,既然该高速缓存来自DAL,有没有别的方法来更新DB?

相关问题