实体框架与订购的一对多关系

时间:2014-01-14 16:05:04

标签: c# asp.net-mvc entity-framework

我正在开始一个新的ASP.Net MVC 5项目并使用EF5和Code First。由于我是EF新手,我试图找出如何设置两个类之间的关系,以便它按照我想要的方式工作。

我正在为“测试”建模。有一个Test类和一个Questions类。用户通过添加一个或多个问题并设置问题顺序来构建测试。因此,我们不仅在测试和问题之间存在一对多的关系,而且还为给定的测试手动排序这些问题(问题来自通用池,教师可以从该池构建他们的个别测试但是命令问他们想要的方式),

我理解如何在EF中获得正常的,基本的一对多关系。但是如何处理这种关系中的排序?我只是创建自己的“链接”类而不是让EF为我构建链接表吗?我可以在Data Annotations或Fluent API中调整一些内容以使其工作(我一直在使用DA而不是Fluent,但如果有帮助则愿意使用它。)

1 个答案:

答案 0 :(得分:1)

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

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
{
   // ...
}

映射将如下所示:

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

modelBuilder.Entity<TestQuestion>()
            .HasRequired(tq => tq.Question)
            .WithOptional();