模型设计和LINQ查询

本文关键字:LINQ 查询 模型 | 更新日期: 2023-09-27 18:29:11

我的模型设计有问题。该应用程序具有由一名或多名讲师教授的模块(即大学模块),讲师也可以教授一个或多个模块,因此在数据库设计方面,模块和讲师之间存在多对多的关系,因此,在我的数据库中,这种关系将由一个加法表表示,该表将Module_id和讲师_id作为复合键来实现这一点。我在模块类中包含了一个讲师列表,带有虚拟修饰符,反之亦然,如下所示

public class Module
{
    public int id { get; set; }
    public string name { get; set; }
    public Department department { get; set; }
    public string code { get; set; }
    public virtual List<Lecturer> lecturers { get; set; }
    ...
}

讲师班:

public class Lecturer
{
    public int id { get; set; }
    public string name { get; set; }
    public virtual List<Module> modules { get; set; }
    ...
}

我的第一个问题是,这是在模型中实现这种情况的最佳方式吗?这似乎还可以,但这意味着模块有讲师,教授模块,然后由讲师教授。。。等等,并且因此看起来非常低效并且不是最优的。这也意味着,由于这个循环,我不能简单地将Module作为JSON对象返回到浏览器。

最后,如果这是正确的实现,是否有一种方法可以使用LINQ查询模块,然后返回一个有讲师的有限模块,但讲师受到限制,并且没有与之相关的模块?目前我正在使用以下语句?

Module module = dbContext.Modules.Where(r => r.id == id).Single();

模型设计和LINQ查询

就我个人而言,在处理多对多关系时,我喜欢将关系表作为我的模型的一个具体部分。也就是说,我将具有LecturerModule都引用的LecturerModule表。在多对多的关系中,关系是一件事。这对我来说是最有体系结构意义的,使模型更容易使用,而不是试图将关系隐藏在某种复杂的循环树中。