C# 实体框架与排序的一对多关系

C# 实体框架与排序的一对多关系,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我正在启动一个新的ASP.NETMVC5项目,首先使用EF5和代码。因为我是EF的新手,所以我试图弄清楚如何设置两个类之间的关系,使其按照我想要的方式工作 我正在模拟一个“测试”。有一个测试班和一个问题班。用户通过添加一个或多个问题并设置问题顺序来构建测试。因此,我们不仅在测试和问题之间有一对多的关系,而且对给定测试的问题进行手动排序(问题来自通用池,教师可以从该池中构建他们的个人测试,但按照他们想要的方式排序问题) 我了解如何在EF中获得正常、基本的一对多关系。但是如何处理这种关系中的顺序呢?

我正在启动一个新的ASP.NETMVC5项目,首先使用EF5和代码。因为我是EF的新手,所以我试图弄清楚如何设置两个类之间的关系,使其按照我想要的方式工作

我正在模拟一个“测试”。有一个测试班和一个问题班。用户通过添加一个或多个问题并设置问题顺序来构建测试。因此,我们不仅在测试和问题之间有一对多的关系,而且对给定测试的问题进行手动排序(问题来自通用池,教师可以从该池中构建他们的个人测试,但按照他们想要的方式排序问题)


我了解如何在EF中获得正常、基本的一对多关系。但是如何处理这种关系中的顺序呢?我是否只是创建自己的“链接”类,而不是让EF为我构建链接表?我是否可以调整数据注释或Fluent API中的某些内容来实现这一点(我一直在使用DA而不是Fluent,但如果有帮助的话,我愿意使用它)。

如果不同的用户可以以不同的顺序使用相同的问题,那么您应该在测试和问题之间创建链接表(实体),它将保持问题的顺序。大概是这样的:

public class Test
{
   // ...
   public virtual ICollection<TestQuestion> Questions { get; set; }
}

public class TestQuestion
{
   public virtual Test Test { get; set; }
   public virtual Question Question { get; set; }
   public int Order { get; set; }
}

public class Question
{
   // ...
}
公共类测试
{
// ...
公共虚拟ICollection问题{get;set;}
}
公共类测试问题
{
公共虚拟测试测试{get;set;}
公共虚拟问题{get;set;}
公共整数顺序{get;set;}
}
公开课问题
{
// ...
}
映射将如下所示:

modelBuilder.Entity<Test>()
            .HasMany(t => t.Questions)
            .WithRequired(tq => tq.Test);

modelBuilder.Entity<TestQuestion>()
            .HasRequired(tq => tq.Question)
            .WithOptional();
modelBuilder.Entity()
.有很多(t=>t个问题)
.WithRequired(tq=>tq.Test);
modelBuilder.Entity()
.HasRequired(tq=>tq.Question)
.WithOptional();