实体框架核心层级 ID

Kyl*_*yle 9 entity-framework entity-framework-core

我正在尝试使用 EF Core,但我需要hierarchyid在我的一个表上使用 sql server 数据类型。

是否可以将我的 c# 类中的字段指定为hierarchyid 类型?

我可以在hierarchyid不破坏 EF 的情况下手动将列 EF 创建为类型吗?

编辑:我试图这样做:

public class Entity
{
    public int Id { get; set; }
    public string Name { get; set; }
    public SqlHierarchyId HierarchyId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

建议 EF 核心 2.1 支持此功能,但是当我运行 add-migration 时,出现此错误:

The current CSharpHelper cannot scaffold literals of type 'Microsoft.SqlServer.Types.SqlHierarchyId'. Configure your services to use one that can.
Run Code Online (Sandbox Code Playgroud)

Gre*_*Gum 6

对于那些寻找 SqlHierarchyId 包所在的 Nuget 包的人来说,它在Microsoft.SqlServer.Types.

请注意,包信息表示此包包含 DbGeography 和 DbGeometery 类型,但它还包含 SqlHierarchyId 类型。

还要注意类是SqlHierarchyId,不是HierarchyId(就像我正在寻找的那样)。


Ogg*_*las 5

如果您使用的是 Entity Framework Core 3.1,则应使用 NuGet EntityFrameworkCore.SqlServer.HierarchyIdMicrosoft.SqlServer.Types.NET Core 不完全支持。

https://www.nuget.org/packages/EntityFrameworkCore.SqlServer.HierarchyId

https://github.com/dotnet/efcore/issues/365#issuecomment-618688829

EntityFrameworkCore.SqlServer.HierarchyId 由 @bricelam 编写,在 Entity Framework 团队工作,但需要注意的是,此 NuGet 仍然是不受支持的第三方包。

我认为这仍然是您最好的选择,因为它不会很快实施并且可能永远不会得到官方支持。来自 2020-04-07 的评论:

基本上,我们的小团队现在为 .NET 实现、支持和维护 HierarchyId 库似乎并不谨慎,因此我们实际上被阻止了实现这一点。

https://github.com/dotnet/efcore/issues/365#issuecomment-610586190

Microsoft SqlClient Data Provider for SQL Server 中还有一个问题,用于支持 .NET Core 的 SqlHierarchyId 类型。(用于 SQL Server 的 Microsoft ADO.NET 驱动程序,又名 Microsoft.Data.SqlClient GitHub 存储库)

https://github.com/dotnet/SqlClient/issues/322