MVC 多对多仅在代码中首先获取具有某种类型的实体

Posted

技术标签:

【中文标题】MVC 多对多仅在代码中首先获取具有某种类型的实体【英文标题】:MVC many to many get entities with of certain type only in code first 【发布时间】:2018-12-28 10:14:03 【问题描述】:

Company 和 CompanyType 之间存在多对多关系

我想获取仅包含 CompanyType.Name 为“Client”的公司的下拉列表。 IE。一个客户公司列表。

如何在 linq 中做到这一点?

我基本上想在 linq 中执行以下操作

var clientCompanies = db.Companies.SqlQuery(@"SELECT  c.*
FROM    Companies AS c
JOIN    CompanyTypeCompanies AS ctc ON ctc.Company_ID = c.ID
JOIN    CompanyTypes AS ct ON ctc.CompanyType_ID = ct.ID
WHERE   ct.Name = 'Client'").ToList();

【问题讨论】:

【参考方案1】:

如果表之间有适当的外键关系,则可以使用 include 语句

var clientCompanies = db.CompanyTypes
.Where(ct => ct.Name == "Client").Include(ct => ct.CompanyTypeCompanies).Include(ct => ct.Companies).Select(ct => ct.Companies).ToList();

在启动类中

public void ConfigureServices(IServiceCollection services)

    ...

    services.AddMvc()
        .AddJsonOptions(
            options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
        );

    ...

【讨论】:

以上是关于MVC 多对多仅在代码中首先获取具有某种类型的实体的主要内容,如果未能解决你的问题,请参考以下文章

ObjectionJs 获取具有多对多关系的实体

在asp.net mvc中从具有多对多关系的数据库中获取记录

首先在实体框架代码中与中间对象进行多对多映射

多对多(自相关)特定订单实体框架

在关系数据库中对相同实体之间的多个多对多关系进行建模

多对多 Spring MVC mappedBy 引用了一个未知的目标实体属性