Как бы я go о создании этого отношения многие-ко-многим в EF Core? - PullRequest
2 голосов
/ 21 февраля 2020

Итак, у меня есть следующие 3 класса:

User.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; }
}

UserChannel.cs

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

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

UserChannel является средним значением между User и Channel.

Таблица UserChannels выглядит следующим образом:

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

Оба UserId и ChannelId являются внешними ключами, для User и Channel класс.

Теперь, чтобы узнать, какие 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?

Ответы [ 2 ]

3 голосов
/ 21 февраля 2020

Отношение ко многим ко многим без ссылки на объединяющую таблицу / сущность не будет доступно, пока не выйдет 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 года.

2 голосов
/ 21 февраля 2020

В EF.Core многие-ко-многим без таблицы соединения еще не поддерживается . Таким образом, вам пока нужно полагаться на решение с классом UserChannel и вызовом Select.

Поскольку в вашем примере явно не указано, что канал может иметь несколько пользователей, один на один многие решения со свойством ICollection<Channel> также могут работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...