首页 > 解决方案 > 我将如何在 EF Core 中创建这种多对多关系?

问题描述

所以,我有以下3个课程:

用户.cs

public class User
{
    public int Id { get; set; }
    public string Username { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }

    public virtual Timezone Timezone { get; set; }
    public virtual ICollection<UserChannel> UserChannels { get; set; }
}

频道.cs

public class Channel
{
    public int Id { get; set; }
    [Column("Channel")]
    public string Name { get; set; }
}

用户频道.cs

public class UserChannel
{
    public int Id { get; set; }

    public virtual User User { get; set; }
    public virtual Channel Channel { get; set; }
}

UserChannelUser是和之间的媒介Channel

UserChannels表如下所示:

+----+--------+-----------+
| Id | UserId | ChannelId |
+----+--------+-----------+

对于and类, UserIdand都是ChannelId外键。UserChannel

现在,要获取Channels属于用户的内容,我必须编写如下内容:

using var context = new TwitchContext();
var me = context.Users.FirstOrDefault(x => x.Id == 1);
var myChannels = me.UserChannels.Select(x => x.Channel);

有没有办法我可以直接获取集合Channel而不是使用UserChannel

标签: c#entity-framework-core

解决方案


根据当前的路线图,在 EF Core 5 发布之前,不引用连接表/实体的多对多关系将不可用:

https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-5.0/plan#many-to-many-navigation-properties-aka-skip-navigations

此问题跟踪功能请求:

https://github.com/dotnet/efcore/issues/19003

包含在 EF Core 5.0.0 里程碑中。

EF Core 5 计划于 2020 年 11 月发布。


推荐阅读