每个 .ET 开发人员解决常见问题时都应该了解的 5 个 EF Core 功能
每个 .ET 开发人员解决常见问题时都应该了解的 5 个 EF Core 功能
Entity Framework Core (EF Core) 为希望以高效可靠的方式与数据库交互的 .ET 开发人员带来了翻天覆地的变化。通过将复杂的 SQL 查询转换为简单的 C# 代码,EF Core 消除了处理数据的许多麻烦。但问题是 — 许多开发人员没有充分利用 EF Core 提供的强大功能。今天,我将分享 EF Core 的 5 项功能,这些功能可以解决开发人员的实际问题并显著提高您的工作效率。
这些是我希望我在开始时就知道的功能,我敢打它们也会让你免于很多麻烦。
问题:您是否厌倦了在每个查询中为“软删除”实体添加相同的筛选条件?
解决方案:使用 EF Core 中的全局查询筛选器在实体的所有查询中自动应用条件。此功能对于实施软删除、多租户或需要持续筛选的任何方案特别有用
代码语言:javascript代码运行次数:0运行复制public classAppDbContext:DbContext
{
protectedoverridevoidOnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>()
.HasQueryFilter(p =>!p.IsDeleted);// Automatically filter out deleted items
}
}
使用此方法时,EF Core 将始终从查询中排除已删除的产品。这样可以避免忘记在每个查询中添加过滤器的风险,并使您的代码更简洁。
关键字:EF Core 全局查询筛选器、EF Core 软删除、数据库筛选
问题:需要跟踪额外信息,例如上次修改项目的时间,但又不想使实体类混乱?
解决方案:影子属性允许您存储元数据,而无需将其直接包含在 C# 类中。它们非常适合像 or 这样的审计数据,您可能在数据库中需要这些数据,但不想成为主域模型的一部分。LastModifiedCreatedBy
下面是一个示例:
代码语言:javascript代码运行次数:0运行复制public classAppDbContext:DbContext
{
protectedoverridevoidOnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>()
.Property<DateTime>("LastModifiedDate");// Keeps track of the last modification date
}
}
这些属性在类中不可见,这使模型保持整洁,但它们会被跟踪并保存在数据库中。Product
关键字:EF Core 影子属性、在 EF Core 中跟踪审核数据、实体框架核心审核跟踪
问题:您的应用程序速度越来越慢,因为它重复运行相同的查询,从而导致性能问题。
解决方案:编译查询非常适合需要多次运行类似查询的场景。EF Core 通常会在每次使用时编译每个 LIQ 查询,这会增加开销。使用 Explicitly Compiled Queries,您可以重用查询的预编译版本以提高性能。
以下是创建编译查询的方法:
代码语言:javascript代码运行次数:0运行复制public static readonly Func<AppDbContext, int, Product> GetProductById =
EF.CompileQuery((AppDbContext context, int id) =>
context.Products.FirstOrDefault(p => p.Id == id));
现在,您可以像这样使用它:
代码语言:javascript代码运行次数:0运行复制var product = GetProductById(context, ); // This is efficient for repeated queries
通过使用编译的查询,您可以在重复执行相同类型的查询时显著提高应用程序的速度。
关键字:EF Core 编译的查询、优化 EF Core 查询性能、在 Entity Framework Core 中重用查询
问题:想要确切了解 EF Core 向数据库发送的 SQL 命令?或者,也许您需要在执行命令之前对其进行修改?
解决方案:是强大的工具,可让您挂接到数据库命令的生命周期中。它们特别适用于记录、调试或修改命令以强制实施自定义规则。
下面是一个命令的简单示例,它记录所有已执行的 SQL 命令:
代码语言:javascript代码运行次数:0运行复制public classLoggingCommandInterceptor:DbCommandInterceptor
{
publicoverrideInterceptionResult<int>onQueryExecuting(
DbCommand command,
CommandEventData eventData,
InterceptionResult<int> result)
{
Cole.WriteLine($"Executing SQL Command: {command.CommandText}");// Log the SQL command
(command, eventData, result);
}
}
要注册此侦听器,请执行以下操作:
代码语言:javascript代码运行次数:0运行复制optiBuilder.AddInterceptors(new LoggingCommandInterceptor());
使用 EF Core 侦听器是了解数据库级别发生的情况的好方法,这对于排查和优化数据库交互非常有用。
关键字:EF Core 侦听器、在 EF Core 中记录 SQL 命令、EF Core 调试
问题:您希望以特定格式将数据存储在数据库中,但在代码中使用数据的方式不同。例如,你有一个枚举,但你想把它作为一个字符串保存在数据库中以提高可读性。
解决方案:价值转化允许您以所需的格式存储数据。无论是将枚举转换为字符串,还是管理不同类型的单位,值转换都可以弥合 C# 代码与数据在数据库中的表示方式之间的差距。
假设我们的类中有一个 for 的枚举。我们可以将此枚举存储为可读字符串,而不是将此枚举作为整数存储在数据库中。ProductCategoryProduct
代码语言:javascript代码运行次数:0运行复制public classProduct
{
publicint Id {get;set;}
publicProductCategory Category {get;set;}
}
publicenumProductCategory
{
Electronics,
Clothing,
Grocery
}
publicclassAppDbContext:DbContext
{
protectedoverridevoidOnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>()
.Property(p => p.Category)
.HasConversion<string>();// Store enum as string in the database
}
}
通过值转换,EF Core 可帮助您在干净的代码和可读、可维护的数据之间保持平衡。
关键字:EF Core 值转换、在 EF Core 中将枚举转换为字符串、实体框架数据格式
Entity Framework Core 不仅仅是一个数据库工具,它还是一个强大的 ORM,其功能使开发数据驱动的应用程序更轻松、更干净、更高效。无论是用于一致筛选的全局查询筛选器、用于审核跟踪的影子属性、用于提高性能的编译查询、用于命令日志记录的侦听器,还是用于灵活数据存储的值转换,EF Core 都是您的坚强后盾。
这 5 项 EF Core 功能可以解决开发人员面临的一些最常见问题,即提高性能、减少重复代码以及使数据更有意义。了解和应用这些功能不仅会使您成为更高效的 .ET 开发人员,还可以确保您的应用程序平稳运行并且更易于维护。
本文参与 腾讯云自媒体同步曝光计划,分享自。原始发表:2025-01-01,如有侵权请联系 cloudcommunity@tencent 删除core编译数据性能数据库#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上一篇:2025 胜券在握
推荐阅读
留言与评论(共有 12 条评论) |
本站网友 冰露 | 3分钟前 发表 |
EF Core 都是您的坚强后盾 | |
本站网友 2高清录播系统 | 13分钟前 发表 |
LastModifiedCreatedBy下面是一个示例:代码语言:javascript代码运行次数:0运行复制public classAppDbContext | |
本站网友 桂林电子 | 7分钟前 发表 |
Product> GetProductById = EF.CompileQuery((AppDbContext context | |
本站网友 月饼税 | 19分钟前 发表 |
并使您的代码更简洁 | |
本站网友 桐庐租房网 | 21分钟前 发表 |
这会增加开销 | |
本站网友 新苑小区二手房 | 21分钟前 发表 |
通过将复杂的 SQL 查询转换为简单的 C# 代码 | |
本站网友 tm2009下载 | 16分钟前 发表 |
原始发表:2025-01-01 | |
本站网友 丁波 | 8分钟前 发表 |
1. 全局查询过滤器:避免重复的过滤逻辑问题:您是否厌倦了在每个查询中为“软删除”实体添加相同的筛选条件?解决方案:使用 EF Core 中的全局查询筛选器在实体的所有查询中自动应用条件 | |
本站网友 格列卫价格多少钱一盒 | 9分钟前 发表 |
此功能对于实施软删除 | |
本站网友 青春痘的原因 | 14分钟前 发表 |
用于命令日志记录的侦听器 | |
本站网友 四海一家电话 | 4分钟前 发表 |
在 EF Core 中记录 SQL 命令 |