首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架核心层次结构

实体框架核心层次结构
EN

Stack Overflow用户
提问于 2018-05-30 07:36:15
回答 3查看 6.5K关注 0票数 9

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

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

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

编辑:我尝试过这样做:

代码语言:javascript
复制
public class Entity
{
    public int Id { get; set; }
    public string Name { get; set; }
    public SqlHierarchyId HierarchyId { get; set; }
}

虽然有人建议EF core 2.1支持这一点,但是当我运行add-migration时,我得到了这个错误:

代码语言:javascript
复制
The current CSharpHelper cannot scaffold literals of type 'Microsoft.SqlServer.Types.SqlHierarchyId'. Configure your services to use one that can.
EN

回答 3

Stack Overflow用户

发布于 2020-05-04 20:17:46

如果你使用的是实体框架核心3.1,你应该使用NuGet EntityFrameworkCore.SqlServer.HierarchyId。.NET核心不完全支持Microsoft.SqlServer.Types

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

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

EntityFrameworkCore.SqlServer.HierarchyId是由实体框架团队的@bricelam编写的,但需要注意的是,此NuGet仍然是一个不受支持的第三方包。

我认为这仍然是你最好的选择,因为它不会很快实现,也可能永远不会有官方的支持。2020-04-07评论:

基本上,对于我们的小团队来说,现在实现、支持和维护.NET的HierarchyId库似乎并不谨慎,所以我们在实现这一点上实际上是受阻的。

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

在Microsoft SqlClient Data Provider for SQL Server中也存在一个问题,即支持.NET核心的SqlHierarchyId类型。(用于SQL Server的微软ADO.NET驱动程序,也称为Microsoft.Data.SqlClient GitHub存储库)

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

票数 7
EN

Stack Overflow用户

发布于 2018-10-08 01:38:36

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

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

还要注意的是,这个类是SqlHierarchyId,而不是HierarchyId (正如我所寻找的)。

票数 6
EN

Stack Overflow用户

发布于 2019-11-26 01:57:26

仍然没有很好的原生支持,但是在11/25/19,我发现最好的方法是使用nuget包dotMorten.Microsoft.SqlServer.Types而不是Microsoft.SqlServer.Types,因为Microsoft.SqlServer.Types与核心并不完全兼容。

下面是一个使用dotMorten生成hierarachyId表格的最小工作代码示例

请注意,使用仍然是Microsoft.SqlServer.Types,dotMortan使用相同的名称空间使其成为替代。

代码语言:javascript
复制
using Microsoft.EntityFrameworkCore;
using Microsoft.SqlServer.Types;

namespace ConsoleApp1
{
    public class Db : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
                optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=Test;Trusted_Connection=True;MultipleActiveResultSets=true");
            }
        }
        public DbSet<Person> People { get; set; }
    }
    public class Person
    {
        public int Id { get; set; }
        public SqlHierarchyId HId { get; set; }
        public string Name { get; set; }
    }
}

现在,add-migrationsupdate-database将正常工作并生成表,如下所示:

var peopleDesdenctsOfFirstPerson = db.People.Where(x => x.HId.IsDescendantOf(db.People.First().HId).IsTrue);仍然不能工作,我也找不到替代它的方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50594409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档