相关疑难解决方法(0)

实体框架HierarchyId变通方法

EF 5.0

我正在研究一个原型来一起测试hierarchyid和实体框架.我有以下架构:

Create Table dbo.Employee
(
   EmployeeId int identity not null,
   Name nvarchar(100) not null,
   Node hierarchyid not null,
   NodePath as Node.ToString() persisted,
   Level AS Node.GetLevel() persisted,
   ManagerNode as Node.GetAncestor(1) persisted,
   ManagerNodePath as Node.GetAncestor(1).ToString() persisted
);

Alter Table dbo.Employee
    Add Constraint EmployeePK Primary Key NonClustered (EmployeeId);

Go

--Enforce Hierarchy
Alter Table dbo.Employee
    Add Constraint EmployeeManagerNodeNodeFK Foreign Key (ManagerNode) References Employee(Node);
Go

Create Unique Clustered Index EmployeeDepthFirstIndex on dbo.Employee(Node);

Go

Create NonClustered Index EmployeeBreathFirstIndex on dbo.Employee(Level, Node);

Go
Run Code Online (Sandbox Code Playgroud)

从我的阅读中,EF目前不支持hierarchyid数据类型,但是有些人提出了一些变通方法,例如创建我上面已经完成的计算列(Node.ToString()).

有没有办法设置EF,以便它识别父/子关系,这样我可以有效地拥有一个下属集合?例如 …

entity-framework entity-framework-5

14
推荐指数
2
解决办法
1万
查看次数

一个包含后如何执行多个然后包含导航道具

对于TestType,我想同时包含导航道具Schoolclass和Subject。

我可以这样做:

.Include(t => t.TestType)
 .ThenInclude(x => x.Subject)
Run Code Online (Sandbox Code Playgroud)

但不是:

.Include(t => t.TestType)
.ThenInclude(x => x.Subject)
.ThenInclude(x => x.Schoolclass)
Run Code Online (Sandbox Code Playgroud)

因此,我尝试了一些技巧,并且奏效了:

我将TestType包含了2次...

var test = await context.Tests.Where(t => t.SchoolyearId == schoolyearId)
                                          .Include(t => t.TestType)
                                          .ThenInclude(x => x.Subject)
                                           .Include(t => t.TestType)
                                          .ThenInclude(x => x.Schoolclass)
                                           .AsNoTracking()
                                          .ToListAsync();
Run Code Online (Sandbox Code Playgroud)

这是官方的方法还是有更好的方法?

更新

   public class TestType
    {
        public TestType()
        {
            Tests = new HashSet<Test>();
        }

        public int Id { get; set; }
        public string Name { get; set; }
        public int Weight { get; set; }
        public ISet<Test> …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-core

5
推荐指数
2
解决办法
2693
查看次数