Anduin Xue
Anduin Xue

Anduin's Tech Blog

SQL Server


EF second layer cache to enhance your SQL database performance based on Redis

本篇博客介绍了如何使用基于Redis的EF第二层缓存来提高SQL数据库性能。首先,安装`EFCoreSecondLevelCacheInterceptor`包,然后在`StartUp`类的`ConfigureServices`方法中进行相应的配置。这个缓存会在通过使用这个库的DbContext更改实体(插入、更新或删除)时更新。如果数据库通过其他方式(如存储过程或触发器)更新,缓存将变得过时。但是,如果我们的应用程序在多个实例中运行,数据库的更改可能不适用于其他实例,可能会导致许多问题。此时,我们需要使用Redis来存储缓存。 Redis是一种开源(BSD许可)的内存数据结构存储,用作数据库、缓存和消息代理。本文介绍了三种安装Redis的方法,分别是在Redis官网下载安装、在Windows Server上安装及在Azure上创建Redis缓存实例。安装完成后,使用命令安装`EasyCaching.Redis`包,并修改`StartUp`方法以连接Redis数据库并使用Redis存储Entity-Framework Core的缓存,支持扩展。 此外,还需在`appsettings.json`文件中添加正确的Redis连接信息。这样,在启动过程中,应用程序将尝试连接到Redis数据库,并使用Redis缓存数据库结果。在不修改代码的情况下,ASP.NET Core应用程序的性能得到了极大的提升。Redis值得称赞! 那么,如何在多实例应用程序中保持可扩展性呢?使用Redis作为缓存存储是否足够满足我们的需求?在实际应用中,我们可能还需要关注其他性能优化策略。--GPT 4

ASP.NET Core C# SQL Server SQL Entity Framework Core Azure Redis Caching Cache

Creating a Model for an existing database in Entity Framework Core (DB First)

本文详细介绍了如何在Entity Framework Core中为现有数据库(如SQL Server和MySQL)创建模型(数据库优先)。首先,安装EF(dotnet-ef)工具和相关依赖项。然后,为现有的SQL Server数据库创建一个干净的.NET项目,并使用`dotnet ef dbcontext scaffold`命令反向生成数据库的模型。在命令中,需要填写正确的数据库连接字符串。此外,还可以通过参数`-t TableNameOrViewName`来只反向生成特定表或视图的模型。 对于现有的MySQL数据库,操作步骤类似,可以参考MySQL官方文档中的示例。需要注意的是,使用MySQL时务必使用.NET 5.0,否则可能会出现问题。在完成反向生成后,可以根据需要升级项目。 请注意,在创建模型后,每次更改模型时都需要使用迁移命令来保持数据库与模型的同步。本文提供的方法和示例能帮助你快速地为现有数据库创建模型,从而更好地利用Entity Framework Core进行数据操作。那么,你是否已经准备好尝试这些方法来为你的数据库项目创建模型呢?--GPT 4

C# Entity Framework SQL Server Database Entity Framework Core LINQ

Soft deletion in Entity Framework Core

In this blog post, we explore the implementation of soft deletion in Entity Framework Core, a useful feature for cases where data needs a second step before being permanently deleted from the database. By marking data as "Deleted" rather than removing it completely, we can maintain a record of deleted items for further review or processing. We begin by creating an example entity, `Post`, with properties such as `PostId`, `Title`, `Content`, and `IsDeleted`. The `IsDeleted` property indicates whether an item is considered deleted or not. Deleted items will not be selected by default, but can still be accessed using manual SQL queries. Next, we create a `BloggingContext` class that inherits from `DbContext` and contains a `DbSet<Post>` property. We override the `OnConfiguring` method to configure the SQL Server connection, and the `OnModelCreating` method to add a filter that selects only non-deleted posts. To implement soft deletion, we override the `SaveChanges` method in our `Bl...--GPT 4

C# Entity Framework SQL Server Soft deletion

Auto update database for ASP.NET Core with Entity Framework

在ASP.NET Core项目中,通过Entity Framework连接到数据库时,我们通常需要执行`dotnet ef database update`脚本来更新数据库。然而,这个过程容易被遗忘,导致问题的发生。那么如何在应用程序启动时自动更新数据库呢? 首先,需要了解自动迁移数据库是有风险的,可能导致数据丢失、处理过时的分支以及迁移失败等问题。因此,除非确保一切安全,否则不建议自动更新数据库。 要实现自动更新数据库,需要在项目中添加以下依赖项: <PackageReference Include="Polly" Version="7.2.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> 借助`Polly`库,可以轻松地重试任务。 接下来,将以下代码复制到项目中: public static IHost MigrateDbContext<TContext>( this IHost host) where TContext : DbContext { // ... } 这段代码为IHost创建了一个扩展方法,允许在应用程序启动后自动升级数据库。它使用应用程序的默认服务提供程序来创建作用域并获取`DBContext`,然后尝试将数据库迁移到最新状态。 如果数据库为空或根本不存在,脚本还可以自动创建数据库。 最后,在启动过程中使用扩展方法,如下所示: public static void Main(string[] args) { CreateHostBuilder(args) .Build() ...--GPT 4

ASP.NET Core C# Entity Framework SQL Server

Consolidate all Entity-Framework database migrations to one migration

本文介绍了如何在不删除任何数据的情况下,整合所有Entity Framework Core代码优先迁移。在代码出错或迁移过多导致编辑器变慢的情况下,可能需要重置所有迁移。但是,直接在代码中删除所有迁移会导致数据库更新失败。因此,本文提供了一个解决方案,分为以下几个步骤: 1. 删除`Migrations`文件夹下的所有`*.cs`文件。 2. 删除数据库中`_EFMIgrationHistory`表中的所有项。 3. 创建一个新的迁移,如:`dotnet ef migrations add Init`。 4. 注释由上一步生成的`20XXXXX_Init.cs`类中的`Up`方法和`Down`方法中的所有内容。 5. 使用当前应用程序的状态更新数据库。此步骤不会更改数据库,而只会在`_EFMigrationHistory`表中创建一个项。这将在数据库中记录一个历史,即`Init`迁移已应用于数据库。 6. 取消注释C#文件中的`Up`和`Down`方法。 7. 如果有版本控制,请检查。 8. 重新运行`dotnet ef database update`。这可能会显示一切都是最新的,这正是我们所期望的。 9. 启动应用程序,应用程序将正常运行。 如果您有其他使用不同数据库的环境,则需要**针对每个数据库**执行以下步骤: 10. 检出步骤7中推送的最新代码。 11. 删除数据库中`_EFMIgrationHistory`表中的所有项。 12. 注释由步骤3生成的`20XXXXX_Init.cs`类中的`Up`方法和`Down`方法中的所有内容。 13. 使用当前应用程序的状态更新数据库。此步骤不会更改数据库,而只会在`_EFMigrationHistory`表中创建一个项。这将在数据库中记录一个历史,即`Init`迁移已应用于数据库。 14. 将代码状态重置为步骤10。例如:`git reset --hard HEAD`。 15. 尝试运行应用程序。 在开始之前,强烈建议您首先备份数据。本文提供的方法仅适用于代码优先的EF Core,并不能确保数据不会丢失。那么,这种方法是否适用于所有场景?是否存在更好的方法来整合迁移?在实践中,您可能需要自己寻找答案。--GPT 4

ASP.NET Core C# .NET Core Entity Framework SQL Server

How to fix SQL Server database suspect status

本文详细介绍了如何修复SQL Server数据库的Suspect状态。首先,我们需要找到问题的根源,例如磁盘空间不足等。解决根本问题后,可以按照以下10个步骤进行修复:1. 打开SSMS并连接到失败的SQL Server实例;2. 准备执行SQL;3. 将数据库设置为紧急状态;4. 对数据库进行错误扫描;5. 准备修复;6. 运行修复;7. 重新允许数据库的多用户连接;8. 立即备份;9. 检查数据;10. 修复其他错误。在修复过程中,可能会遇到一些高频问题,例如在数据库处于单用户状态时,我们无法离开当前连接。这时,我们需要手动杀死其他抢占的连接,确保我们是唯一操作数据库的用户。最后,文章还提供了一个常见问题解答(FAQ)部分,帮助解决在修复过程中可能遇到的问题。--GPT 4

SQL Server SSMS SQL

  • 1