云数据存储与EntityFrameworkCore交互指南
立即解锁
发布时间: 2025-08-14 01:30:26 阅读量: 16 订阅数: 45 


C# 12与.NET 8:构建现代企业级应用
### 云数据存储与Entity Framework Core交互指南
#### 1. Cosmos DB客户端
在.NET 8中,可通过Microsoft.Azure.Cosmos NuGet包获取Cosmos DB客户端。它能全面控制所有Cosmos DB功能,而Cosmos DB Entity Framework提供程序更易于使用,但会隐藏一些Cosmos DB的特性。以下是通过.NET 8官方Cosmos DB客户端与Cosmos DB交互的步骤:
- 任何操作都需创建一个客户端对象,使用完毕后,要调用其Dispose方法(或使用using语句)来释放客户端资源。
```csharp
public static async Task CreateCosmosDB()
{
using var cosmosClient = new CosmosClient(endpoint, key);
Database database = await
cosmosClient.CreateDatabaseIfNotExistsAsync(databaseId);
ContainerProperties cp = new ContainerProperties(containerId,
"/DestinationName");
Container container = await database.CreateContainerIfNotExistsAsync(cp);
await AddItemsToContainerAsync(container);
}
```
- 在创建集合时,可传递一个ContainerProperties对象,在其中指定一致性级别、属性索引方式等集合特性。
- 还需定义与集合中要操作的JSON文档结构相对应的.NET类。若类属性名与JSON名称不同,可使用JsonProperty属性进行映射。
```csharp
public class Destination
{
[JsonPropertyName("id")]
public string Id { get; set; }
public string DestinationName { get; set; }
public string Country { get; set; }
public string Description { get; set; }
public Package[] Packages { get; set; }
}
```
拥有必要的类后,就可以使用客户端方法进行ReadItemAsync、CreateItemAsync和DeleteItemAsync操作,也可使用接受SQL命令的QueryDefinition对象查询数据。完整介绍可参考:https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-get-started 。
#### 2. Cosmos DB Entity Framework Core提供程序
Cosmos DB的Entity Framework Core提供程序包含在Microsoft.EntityFrameworkCore.Cosmos NuGet包中。将其添加到项目后,使用方式与使用SQL Server提供程序类似,但有一些区别:
- **无迁移操作**:Cosmos DB数据库无需更新结构,而是有一个确保数据库和所有必要集合被创建的方法:
```csharp
context.Database.EnsureCreated();
```
- **容器映射**:默认情况下,DBContext的DbSet<T>属性映射到一个唯一的容器。可通过以下配置指令指定要映射的容器:
```csharp
builder.Entity<MyEntity>()
.ToContainer("collection-name");
```
- **实体类注解**:实体类上唯一有用的注解是Key属性,当主键不叫Id时,该属性成为必需。
- **主键要求**:主键必须是字符串,且不能自动递增,以避免分布式环境中的同步问题。可通过生成GUID并转换为字符串来确保主键的唯一性。
- **实体关系**:定义实体之间的关系时,可指定一个实体或实体集合由另一个实体拥有,此时它将与父实体一起存储。
#### 3. 关系型数据库与NoSQL数据库对比
| 数据库类型 | 优点 | 缺点 |
| ---- | ---- | ---- |
| 关系型数据库 | 提供自动一致性检查和事务隔离 | 成本较高,在分布式写入占比较高的平均工作负载中性能较差 |
| NoSQL数据库 | 成本低,性能好,尤其适用于分布式写入占比较高的场景 | 缺乏自动一致性检查和事务隔离 |
#### 4. ORM基础
ORM(对象关系映射)工具将关系型数据库表映射到内存中的对象集合,对象属性对应数据库表列。C#中的类型(如布尔值、数字类型和字符串)都有对应的数据库类型。以下是一些类型映射规则:
- GUID类型在无对应数据库类型时,映射为等效的字符串表示。
- 日期和时间类型根据是否包含时区信息等,分别映射为C#的DateTime、DateTimeOffset、DateOnly或Ti
0
0
复制全文
相关推荐










