C# Asp.net核心Webapi Azure CosmosDB更新实体位于不同容器中
我对使用Azure CosmosDB SQL API是完全陌生的。我有一个简单的asp.net核心webapi。我有两个容器供雇主和雇员使用。员工json数据如下: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": "
{
"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()。你可以学到更多