kitlau
kitlau

kitlau's blog

EF Core


EF Core 何时、为何使用 IsUnicode 方法

文章通过实验对比分析了EF Core中IsUnicode()配置在不同数据库中的实际作用。在MariaDB中该配置基本无效,因其UTF-8编码特性已默认支持Unicode;而在MSSQL Server中则会直接影响字段类型选择,使用IsUnicode(false)时生成varchar类型(非Unicode),默认或IsUnicode(true)生成nvarchar类型(Unicode)。作者建议仅在确定字符串为ASCII安全场景(如纯英文内容)时配置IsUnicode(false),以节省存储空间和提升性能,尤其在处理大规模数据时效果显著。同时警示需谨慎处理URL等字段,因用户可能输入非ASCII字符,且现代应用需兼容emoji等扩展字符集。文章还指出EF Core 6新增的[Unicode]属性特性,并强调开发者应避免过度优化导致功能缺陷,需权衡存储成本与数据兼容性。--Qwen3

C# EF Core Entity Framework Core IsUnicode Method Database Design Model Configuration

EF Core 动态构建表达式树简化 DDD 值对象的比较

文章介绍通过动态构建表达式树实现值对象相等比较的方法解决EF Core查询异常问题。用户尝试直接使用lambda表达式比较实体中的值对象属性时抛出异常,通过创建ValueObjectEqualHelper静态类的CheckEqual方法动态生成表达式树,遍历值对象属性构建二叉树结构的条件表达式。该方法处理原始类型和非原始类型属性的不同比较方式,生成的表达式能正确转换为SQL查询条件,成功解决直接比较导致的异常问题,测试结果与预期一致且生成的SQL语句正确。--Qwen3

.NET C# EF Core expression trees Entity Framework Core Dynamic Condition Generation

EF Core 动态构建表达式树为所有实体设置软删除的查询过滤器

本文探讨了在EF Core中通过动态构建表达式树实现软删除查询过滤器的自动化配置方案。针对传统硬编码方式在实体数量增加时维护成本过高的问题,作者展示了如何通过遍历实体类型、动态分析属性特征并构建Lambda表达式,实现"一处定义、全量应用"的过滤逻辑。该方案通过Expression API逐层拼接参数表达式、成员访问表达式和逻辑运算符,最终生成等效于"x => !x.SoftDelete"的查询谓词,并支持通过IgnoreQueryFilters()方法临时禁用过滤。文章不仅提供了基础实现逻辑,还展示了如何通过链式调用和语法糖优化代码可读性,揭示了C#语言特性在元编程场景中的灵活性。最后抛出值得思考的问题:当实体属性命名不统一或存在继承关系时,如何扩展该方案的适用范围?这种动态构建表达式的技术思维,是否还能应用于其他领域模型的自动化处理场景?--Qwen3

.NET EF Core lambda expressions Entity Framework Core Dynamic Expression Trees Soft Delete

手把手构建 C# 表达式树

文章通过构建 `p => p.Age > 18` 的 C# 表达式树示例,系统演示了从参数定义到最终 Lambda 表达式的完整创建过程。通过参数表达式、成员表达式、常量表达式与二元运算符的组合,逐步解析了如何将代码逻辑转化为可动态操作的表达式结构。文章不仅展示了如何将 `Where` 方法与表达式树结合实现动态筛选,更揭示了表达式树在 EF Core 等场景中动态构建查询的深层价值——例如通过值对象比较的语义化封装或软删除属性的全局过滤器设计,让原本需要硬编码的逻辑转化为可编程的动态规则。这种将代码作为数据的操作模式,既突破了传统 Lambda 表达式的静态限制,又为复杂业务规则的组合提供了新思路。当面对需要运行时动态构建查询条件的场景时,你是否想过用表达式树替代硬编码?如何让表达式树成为连接业务逻辑与数据访问层的桥梁?--Qwen3

.NET C# EF Core expression trees Dynamic Expression Linq Expressions

如何在 CSharp 和 EF Core 中使用 UTC 时间

本文介绍了在C#和EF Core中使用UTC时间处理跨时区场景的完整解决方案。首先通过ValueConverter为EF Core中所有以"Utc"结尾的DateTime属性设置UTC时间标识,确保从数据库读取的时间保持UTC特性。接着使用Mapster库创建DTO对象,通过自定义映射规则将UTC时间自动转换为本地时间,其中ProductDto的Created和Modified属性通过调用ToLocalTime方法实现时区转换。该方案解决了外贸网站部署在不同时区时可能出现的时间显示错误问题,通过实体类与DTO的分离保持了领域模型的纯净性,同时利用映射配置集中处理时间转换逻辑。最终通过设置TypeAdapterConfig配置映射规则,验证了UTC时间到本地时间的成功转换及其DateTimeKind属性的正确性,完整实现了跨时区场景下的时间一致性保障。--Qwen3

.NET C# EF Core utc time mapster time zones

  • 1