如何在Entity Framework Core 8内存数据库中使用HierarchyId
在EF Core 8内存数据库中使用HierarchyId解决冲突方案
EF Core 8将SqlServer的HierarchyId类型迁移到了Microsoft.EntityFrameworkCore.SqlServer.Abstractions包,而内存数据库的HierarchyId类型属于EntityFrameworkCore.InMemory.HierarchyId包,两者同名导致命名冲突,可通过以下方式解决:
用命名空间别名区分类型
在代码文件顶部给两个冲突的命名空间设置别名,明确区分不同来源的HierarchyId:using SqlServerHierarchy = Microsoft.EntityFrameworkCore.SqlServer.Abstractions; using InMemoryHierarchy = EntityFrameworkCore.InMemory.HierarchyId;后续使用内存数据库的HierarchyId时,直接通过别名调用:
public InMemoryHierarchy.HierarchyId NodePath { get; set; }按环境拆分依赖引用
如果项目同时需要SqlServer和内存数据库支持,建议分环境配置依赖:- 生产/正式环境:仅引用
Microsoft.EntityFrameworkCore.SqlServer.Abstractions包 - 测试/本地调试环境:仅引用
EntityFrameworkCore.InMemory.HierarchyId包
这样编译时就不会出现类型冲突问题。
- 生产/正式环境:仅引用
直接使用完全限定类型名
不想配置别名的话,直接在代码中写出完整的类型路径,明确指定内存数据库的HierarchyId:public EntityFrameworkCore.InMemory.HierarchyId.HierarchyId NodePath { get; set; }
内容的提问来源于stack exchange,提问作者Cododoc
相关产品推荐
相关产品推荐

