C# 实体框架6.1.3层次结构id不工作

C# 实体框架6.1.3层次结构id不工作,c#,entity-framework-6,hierarchy,C#,Entity Framework 6,Hierarchy,我正在尝试将SQL server HierarchyId数据类型与实体框架一起使用。由于entity framework不支持HierarchyId数据类型,因此我使用的entity framework fork具有HierarchyId支持: DB表如下: CREATE TABLE OrgStructure( [Id] [hierarchyid] NOT NULL, [Level] AS ([Id].[GetLevel]()), [NodeId] [int] IDE

我正在尝试将SQL server HierarchyId数据类型与实体框架一起使用。由于entity framework不支持HierarchyId数据类型,因此我使用的entity framework fork具有HierarchyId支持:

DB表如下:

CREATE TABLE OrgStructure(
    [Id] [hierarchyid] NOT NULL,
    [Level]  AS ([Id].[GetLevel]()),
    [NodeId] [int] IDENTITY(1,1) NOT NULL,
    [Title] [varchar](50) NULL)
public partial class VisibilityHierarchyDBContext : DbContext
{

    public virtual DbSet<OrgStructure> OrgStructure { get; set; }

    public VisibilityHierarchyDBContext(string nameOrConnectionString)
    : base(nameOrConnectionString)
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new OrgStructureMapping());            
    }
}
public class HomeController : Controller
{
    VisibilityHierarchyDBContext context;
    public HomeController(VisibilityHierarchyDBContext context)
    {
        this.context = context;
    }
    public IActionResult Index()
    {
        var o = context.OrgStructure.Take(5).ToList();  /* Exception is  thrown here */

        return View();
    }
 }
使用HierarchyId数据类型的My实体定义如下:

public class OrgStructure
{        
    public HierarchyId  Id { get; set; }
    public Nullable<int> Level { get; set; }
    public int NodeId { get; set; }
    public string Title { get; set; }
}
我在上面显示的索引操作中遇到以下错误:

无法将“OrgStructure”上的“Id”属性设置为 “Microsoft.SqlServer.Types.SqlHierarchyId”值。你必须设置这个 属性设置为类型为的非空值 'System.Data.Entity.HierarchyId'


非常感谢为解决此错误提供的任何帮助

您是否尝试过使用
Computed
作为
DatabaseGeneratedOption
而不是
None
。实际上,错误消息有点误导。当我从实体定义和映射中删除“Level”属性时,它工作得很好。它被打破了,因为级别列被定义为计算列,它自动选择smallint作为数据类型,而在实体定义中,它的类型是int。

您可以分享一个示例,说明如何将新行添加到
OrgStructure
表中吗?@nocodename:我已经手动填充了表,只是尝试使用DbContext。我刚刚注意到的一点是,
Id
属性是否应该设置为
IsOptional()
?您是否已尝试使用
Computed
DatabaseGeneratedOption按要求映射它?@nocodename:Sorry IsOptional()错误地出现了。我在尝试别的东西。更新的问题。你能提供你的代码来获取数据吗?尝试将其设置为“计算”,但没有帮助。
public void ConfigureServices(IServiceCollection services)
    {
        services.AddScoped<VisibilityHierarchyDBContext>((s) => new VisibilityHierarchyDBContext(Configuration.GetConnectionString("VisibilityDB")));

        // Add framework services.
        services.AddMvc();
    }
public class HomeController : Controller
{
    VisibilityHierarchyDBContext context;
    public HomeController(VisibilityHierarchyDBContext context)
    {
        this.context = context;
    }
    public IActionResult Index()
    {
        var o = context.OrgStructure.Take(5).ToList();  /* Exception is  thrown here */

        return View();
    }
 }