Хранить коллекцию строк с EF в ASP.NET - PullRequest
0 голосов
/ 11 июня 2018

Подробности

Я работаю над проектом ASP.NET MVC Core 2.0.У меня есть объект MVC темы, в котором я храню тот идентификатор пользователя, который создал тему и хотел бы хранить пользователей, которые могут редактировать эту тему.

Логически я должен хранить идентификаторы пользователей, которые могут редактироватьtopic.

В этом проблема.

Вопрос

Как можно хранить идентификаторы пользователей, которые представляют собой строки с отображением в EF? Невозможно сохранить List<string> или string[], поскольку EF не может сопоставить коллекции такого типа.

Пример идентификатора пользователя: a77-95471b9f597d (кстати, это значение по умолчанию ApplicationUser проекта ASP.NET.)

Также: у одного пользователя может быть больше идентификаторов тем, а у одной темы может быть больше идентификаторов пользователей

Я уже думал, что все идентификаторы хранятся в простомстрока, разделите их любым символом (например, точка с запятой), но возникает вопрос: как долго может быть простая строка, и там у меня был ответ, который я прочитал:

Этоэто одна из тех ситуаций, когда [«Если вам нужно спросить, вы, вероятно, делаете что-то не так».] это случай.

1 Ответ

0 голосов
/ 11 июня 2018

Язвительный и бесполезный, но точный.Это типичный сценарий m: m.

public class Topic {
    public int TopicId { get; set; }
    // other topic stuff
    public virtual User Owner { get; set; }
    public virtual ICollection<Collaboration> Collaborators { get; set; }
}

public class User {
    public int UserId { get; set; }
    // other user stuff
    public virtual ICollection<Collaboration> Collaborators { get; set; }
}

public class Collaboration {
    public int CollaborationId { get; set; }
    // other stuff dependent on topic + user
    public int UserId { get; set; }
    public virtual User User { get; set; }
    public int TopicId { get; set; }
    public virtual Topic Topic { get; set; }
}

Все пользователи, которые могут редактировать (сотрудничать) тему.db = EF context

db.Topics.Include("Collaborators").Include("Collaboration.User").FirstOrDefault(p => p.TopicId == <key value>);

Все темы, которые пользователь может редактировать

db.Users.Include("Collaborators").Include("Collaboration.Topic").FirstOrDefault(p => p.UserId == <key value>);

Это реляционная модель.Сотрудничество - это «таблица соединений» для отношений между Темами и Пользователями.В Сотрудничестве есть одна запись для каждого пересечения Темы и Пользователя.А в теме также есть владелец (один пользователь), который является 1: м владельцев тем.

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