C数据交互与云存储选择指南
立即解锁
发布时间: 2025-08-25 01:04:35 阅读量: 2 订阅数: 8 

### C# 数据交互与云存储选择指南
#### 1. C# 中使用 Entity Framework Core 处理数据
在 C# 开发中,Entity Framework Core 是一个强大的工具,用于与数据库进行交互。下面将介绍其在事务处理、数据层部署、高级特性等方面的应用。
##### 1.1 事务处理
通常,对 `DBContext` 实例所做的所有更改会在第一次调用 `SaveChanges` 时作为一个事务提交。但有时需要在同一事务中包含查询和更新操作,这时就需要显式处理事务。可以将多个 Entity Framework Core 命令放在与事务对象关联的 `using` 块中,示例代码如下:
```csharp
using (var dbContextTransaction = context.Database.BeginTransaction())
{
try
{
...
...
dbContextTransaction.Commit();
}
catch
{
dbContextTransaction.Rollback();
}
}
```
在上述代码中,`context` 是 `DBContext` 子类的实例。在 `using` 块内,可以通过调用 `Rollback` 和 `Commit` 方法来中止或提交事务。事务块中包含的任何 `SaveChanges` 调用都会使用已有的事务,而不是创建新的事务。
##### 1.2 数据层部署
当数据库层在生产或预生产环境中部署时,通常已有一个空数据库,需要应用所有迁移来创建数据库对象。可以通过调用 `context.Database.Migrate()` 方法来实现,该方法会应用尚未应用到数据库的迁移,因此在应用程序的生命周期内可以安全地多次调用。`context` 是 `DBContext` 类的实例,需要通过具有足够权限的连接字符串传递,以便创建表并执行迁移中包含的所有操作。
对于 Web 应用程序,在 Azure 上部署时,可以使用提供的连接字符串检查迁移,也可以在应用程序启动时手动调用 `context.Database.Migrate()` 方法。对于桌面应用程序,可以在应用程序安装和后续更新时应用迁移。
在首次安装应用程序或后续更新时,可能需要用初始数据填充某些表。对于 Web 应用程序,此操作可以在应用程序启动时执行;对于桌面应用程序,可以在安装过程中执行。在填充数据之前,需要使用 `Any()` LINQ 方法验证表是否为空,以避免多次添加相同的表行,示例代码如下:
```csharp
if(!context.Destinations.Any())
{
//populate here the Destinations table
}
```
##### 1.3 高级特性 - 全局过滤器
全局过滤器于 2017 年底引入,可实现软删除和多租户表等技术,让每个用户只能看到自己的记录。全局过滤器使用 `modelBuilder` 对象定义,该对象可在 `DBContext` 的 `OnModelCreating` 方法中使用,语法如下:
```csharp
modelBuilder.Entity<MyEntity>().HasQueryFilter(m => <define filter condition here>);
```
例如,如果为 `Package` 类添加 `IsDeleted` 属性,可以通过定义以下过滤器来软删除 `Package` 而不将其从数据库中移除:
0
0
复制全文
相关推荐









