Integrate Azure Cosmos DB SDK for .NET
Create the Cosmos Client
- Create an instance of the `CosmosClient` class by providing the endpoint URI and primary key you get from the Azure Portal. This client instance is used to interact with Cosmos DB.
```csharp
using Microsoft.Azure.Cosmos;
string endpointUri = "";
string primaryKey = "";
CosmosClient cosmosClient = new CosmosClient(endpointUri, primaryKey);
```
- Configure the client for better performance by adjusting parameters such as connection mode and request timeout if necessary.
Create a Database and Container
- Using the `CosmosClient`, create or get a reference to a database. You can specify options such as throughput if you want a dedicated throughput setting for that database.
```csharp
Database database = await cosmosClient.CreateDatabaseIfNotExistsAsync("SampleDatabase");
```
- Within the database, create a container or get an existing one. This is where your items (documents) will reside. Specify a partition key to optimize performance.
```csharp
Container container = await database.CreateContainerIfNotExistsAsync("SampleContainer", "/partitionKeyPath");
```
Perform CRUD Operations
- Insert items into the container by creating C# class objects that represent your data and using the `CreateItemAsync` method.
```csharp
public class SampleItem
{
public string Id { get; set; }
public string Name { get; set; }
public string PartitionKeyPath { get; set; }
}
SampleItem newItem = new SampleItem { Id = "1", Name = "Sample Name", PartitionKeyPath = "SamplePartition" };
await container.CreateItemAsync(newItem, new PartitionKey(newItem.PartitionKeyPath));
```
- Read items by querying the container using LINQ or SQL-like syntax. Make sure your queries efficiently use the partition key.
```csharp
var sqlQueryText = "SELECT * FROM c WHERE c.PartitionKeyPath = @PartitionKey";
QueryDefinition queryDefinition = new QueryDefinition(sqlQueryText).WithParameter("@PartitionKey", "SamplePartition");
FeedIterator queryResultSetIterator = container.GetItemQueryIterator(queryDefinition);
List items = new List();
while (queryResultSetIterator.HasMoreResults)
{
FeedResponse currentResultSet = await queryResultSetIterator.ReadNextAsync();
foreach (SampleItem item in currentResultSet)
{
items.Add(item);
}
}
```
Handle Exceptions and Optimize Performance
Best Practices and Considerations
- Use the latest SDK version to benefit from performance improvements and new features.
- Utilize appropriate indexing strategies and partition key choices to improve operation efficiency.
- Monitor the application and Cosmos DB usage to adjust throughput and indexing as needed for cost efficiency and performance optimization.