Как создать отношение многие ко многим в Linq to SQL? - PullRequest
1 голос
/ 26 февраля 2010

У меня есть таблица User, таблица Roles и таблица ссылок User2Roles. Я хочу создать сущности LinqToSQL, чтобы я мог обращаться к ролям от пользователя как role.Users и user.Roles вручную. Используя конструктор, он на самом деле создает 3 объекта: пользовательские роли2 и пользовательские роли роли.

Ответы [ 3 ]

0 голосов
/ 27 февраля 2010

Вы можете создать собственное свойство в роли и пользовательских классах. Цель этого свойства - получить пользователей для текущей роли и вернуть результаты в виде коллекции. Тогда вы можете сделать то же самое для другого класса.

Вот код без тестирования (будет заменен, как только я смогу вернуться к своему устройству разработки)

partial class Roles
{
  List<users> Users
  {
    get { return User2Roles.users.toList(); }
  }
}

partial class Users
{
  List<roles> Roles
  {
    get { return User2Roles.roles.toList(); }
  }
}
0 голосов
/ 27 февраля 2010

Вы не можете создать отношение «многие ко многим» в Linq to SQL. Тем не менее, вы можете легко создать свой собственный «сахар» для него.

public partial class User
{
    public IQueryable<Role> Roles
    {
        get { return UserRoles.Select(ur => ur.Role); }
    }
}

public partial class Role
{
    public IQueryable<User> Users
    {
        get { return UserRoles.Select(ur => ur.User); }
    }
}

Это почти все, что нужно сделать. Это избавит вас от необходимости всегда иметь дело с промежуточной сущностью. Вы можете написать код против него, как если бы это были настоящие отношения M: M:

foreach (Role role in user.Roles) { ... }

Вы даже сможете использовать это в проекциях запросов (хотя у вас, вероятно, будут некоторые проблемы с использованием его в фильтрах).

0 голосов
/ 26 февраля 2010

К сожалению, я верю, что вы застряли с этой временной сущностью. Насколько я знаю, Linq to SQL не поддерживает много-много соединений в хорошем, чистом виде, как вы думаете. В коде есть обходные пути, чтобы объектная модель, по крайней мере, выглядела , чтобы поддерживать многих в манерах так, как вы хотите.

Проверьте этот пост на SO
Или это ссылка

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