kitlau
kitlau

kitlau's blog

Entity Framework 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

  • 1