Я уже решил эту проблему, просто добавив столбец автоинкремента идентификатора закрытого ключа в таблицу поиска, так как Entity Framework
всегда будет скрывать таблицы поиска, содержащие только 2 столбца с внешними ключами, в конечных таблицах.Иногда вам нужно добавить запись поиска непосредственно через Entity Framework
, и это поможет вам достичь этого.
Обновление от автора вопроса
Я просто хотел предоставить обновление для моей собственной реализацииэтот ответЯ добавил столбец идентификаторов в таблицу поиска и создал уникальный ключ для двух столбцов внешнего ключа, чтобы предотвратить повторяющиеся записи отношений в таблице.Моя модель теперь выглядит следующим образом:
http://www.codetunnel.com/content/images/ManyToManyDynamic.jpg
Единственное, что отстой, - это получить коллекцию всех связанных ролей, которые я должен сделать:
List<Role> roles = new List<Role>();
foreach (UserRole userRole in myUser.UserRoles)
roles.Add(userRole.Role);
Это немного больше работы, но если нет эквивалента user.Roles.Remove(role)
(что-то вроде user.Roles.Associate(existingRoleEntity)
), тогда это мой единственный вариант.
Обновление:
List<Role> roles = new List<Role>();
foreach (UserRole userRole in myUser.UserRoles)
roles.Add(userRole.Role);
Может бытьдостигается с помощью:
IEnumerable<int> roleIDs = myUser.UserRoles.Select(r => r.RoleID);
IEnumerable<Role> roles = Entityies.Roles.Where(r => roleIDs.Contains(r.roleID);
Вы всегда можете использовать открытый частичный класс , чтобы расширить User
, чтобы иметь свойство для возврата всех ролей, используя описанное выше.Нажмите на ссылку, чтобы узнать подробности о public partial class
, которые я дал по другому вопросу.