C# Asp.net核心Webapi Azure CosmosDB更新实体位于不同容器中

C# Asp.net核心Webapi Azure CosmosDB更新实体位于不同容器中,c#,azure-cosmosdb,asp.net-core-webapi,C#,Azure Cosmosdb,Asp.net Core Webapi,我对使用Azure CosmosDB SQL API是完全陌生的。我有一个简单的asp.net核心webapi。我有两个容器供雇主和雇员使用。员工json数据如下: { "id": "56b2aea8-df9e-41e8-a1d0-6ca77e625284", "name": "ABC", "employees": [ { "id": "

我对使用Azure CosmosDB SQL API是完全陌生的。我有一个简单的asp.net核心webapi。我有两个容器供雇主和雇员使用。员工json数据如下:

{
  "id": "56b2aea8-df9e-41e8-a1d0-6ca77e625284",
  "name": "ABC",
  "employees": [
    {
      "id": "fd3e6a4b1af9xxxx",
      "name": "EMP1",
      "dateAdded": "02/09/2021 12:00:51"
    },
    {
      "id": "ecaa7250xxxx",
      "name": "EMP2",
      "dateAdded": "02/09/2021 13:29:29"
    }
  ]
}
我想创建单独的端点来创建/编辑员工。员工json数据为:

{
    "dateOfBirth": "09/05/1976",
    "name": "EMP1Updated",
    "id": "80d9585a-1f6d-4348-b8e0-5d40f9586eb7",
}
我对雇主和雇员都有单独的回购协议。如果我更改员工姓名,我必须更改雇主容器中相应的员工姓名。我不知道如何做到这一点。有人能给我建议最好的解决办法吗。员工的更新代码为:

try
        {
            var container = _cc.GetContainer(_databaseId, _employeeDataContainerName);

            var sqlQueryText = "SELECT * FROM c WHERE c.id = @EmployeeId";
            var queryDefinition = new QueryDefinition(sqlQueryText).WithParameter("@EmployeeId", id);
            var queryResultSetIterator =
                container.GetItemQueryIterator<EmployeeRecord>(queryDefinition);

            var currentResultSet = await queryResultSetIterator.ReadNextAsync();

            var firstRecord = currentResultSet.FirstOrDefault();
            if (firstRecord == default)
            {
                var message = $"Unable to find any employee for the given ID ({id})";
                throw new Exception(message);
            }
            var docToWrite = Mapper.MapToEmployeeRecord(employeeModel, learnerEntity.Id);
            await container.UpsertItemAsync(docToWrite, new PartitionKey(id.ToString()));
        }
试试看
{
var container=_cc.GetContainer(_databaseId,_employeeDataContainerName);
var sqlQueryText=“从c中选择*,其中c.id=@EmployeeId”;
var queryDefinition=new queryDefinition(sqlQueryText).WithParameter(“@EmployeeId”,id);
变量queryResultSetIterator=
container.getItemQueryInterator(queryDefinition);
var currentResultSet=await queryResultSetIterator.ReadNextAsync();
var firstRecord=currentResultSet.FirstOrDefault();
if(firstRecord==默认值)
{
var message=$“找不到给定ID({ID})的任何员工”;
抛出新异常(消息);
}
var docToWrite=Mapper.MapToEmployeeRecord(employeeModel,learnerEntity.Id);
wait container.UpsertItemAsync(docToWrite,new PartitionKey(id.ToString());
}

谢谢

维护两个容器之间引用完整性的方法是使用change提要。使用change feed监视一个容器,然后在更新项目时,可以调用函数查询员工容器并对其调用ReplaceItemAsync()。你可以学到更多