在 Cosmos db 中添加文档数据会出错,因为资源已经存在
Adding Document data in Cosmos db gives error as resource already exist
我有下面的单元测试用例,我试图在 cosmos Db 中一个一个地添加 JObjects
的列表,但它没有给出错误,因为
Resource with specified id or name already exists
而我的数据库实际上是空的,里面没有任何价值。我在这里做错了什么??
[Fact]
public async Task AddDataInCosmosDbEmulator()
{
await ReadConfigAsync();
var jsonData = await ReadAllData();
Uri collectionUri = UriFactory.CreateDocumentCollectionUri(DatabaseId, RecordingCollection);
foreach(var obj in jsonData)
{
Document doc = await client.CreateDocumentAsync(collectionUri, obj);
}
}
private async Task ReadConfigAsync()
{
client = new DocumentClient(new Uri(CosmosEndpoint), EmulatorKey,
new ConnectionPolicy {
ConnectionMode = ConnectionMode.Direct,
ConnectionProtocol = Protocol.Tcp
});
}
jsonData 是这样的格式:
{{"id":"Test1","Name":"123"}},
{{"id":"Test3","Name":"12r3"}},
{{"id":"Test15","Name":"12we3"}},
{{"id":"Test12","Name":"oi123"}}
一些思考和建议。要确保它不是真正存在的条目,请重写
Document doc = await client.CreateDocumentAsync(collectionUri, obj );
到
Document doc = await client.UpsertDocumentAsync(collectionUri, obj );
如果可行,则可能是您的本地模拟器已经获取了数据。问题是,当您第二次重新 运行 单元测试时,当您实际执行插入时,这将是一个问题。
检查模拟框架。单元测试应该只测试手头的代码,而不是实际的持久性项目等等?
你会如何在构建服务器上解决这个问题?你会如何管道这个?将实际的集成测试留给集成测试。检查
我有下面的单元测试用例,我试图在 cosmos Db 中一个一个地添加 JObjects
的列表,但它没有给出错误,因为
Resource with specified id or name already exists
而我的数据库实际上是空的,里面没有任何价值。我在这里做错了什么??
[Fact]
public async Task AddDataInCosmosDbEmulator()
{
await ReadConfigAsync();
var jsonData = await ReadAllData();
Uri collectionUri = UriFactory.CreateDocumentCollectionUri(DatabaseId, RecordingCollection);
foreach(var obj in jsonData)
{
Document doc = await client.CreateDocumentAsync(collectionUri, obj);
}
}
private async Task ReadConfigAsync()
{
client = new DocumentClient(new Uri(CosmosEndpoint), EmulatorKey,
new ConnectionPolicy {
ConnectionMode = ConnectionMode.Direct,
ConnectionProtocol = Protocol.Tcp
});
}
jsonData 是这样的格式:
{{"id":"Test1","Name":"123"}},
{{"id":"Test3","Name":"12r3"}},
{{"id":"Test15","Name":"12we3"}},
{{"id":"Test12","Name":"oi123"}}
一些思考和建议。要确保它不是真正存在的条目,请重写
Document doc = await client.CreateDocumentAsync(collectionUri, obj );
到
Document doc = await client.UpsertDocumentAsync(collectionUri, obj );
如果可行,则可能是您的本地模拟器已经获取了数据。问题是,当您第二次重新 运行 单元测试时,当您实际执行插入时,这将是一个问题。
检查模拟框架。单元测试应该只测试手头的代码,而不是实际的持久性项目等等?
你会如何在构建服务器上解决这个问题?你会如何管道这个?将实际的集成测试留给集成测试。检查