Как представить отношение «количество воспроизведений» в Entity Framework — сначала код

#.net #entity-framework

#.net #entity-framework

Вопрос:

Допустим, у меня есть простое приложение для аудиоплеера с двумя объектами, User и Tracks . Существует фиксированное количество дорожек, пользователи могут выбирать их для прослушивания. Я хочу отслеживать количество воспроизведений каждого пользователя для каждого трека. Какой самый простой способ представить это в Entity Framework? У меня есть несколько идей, но ни одна из них не кажется особенно элегантной.

  • У каждого пользователя может быть свойство со словарем, где ключами являются идентификаторы дорожек, а значениями — целые числа. Но все они должны быть изменены, если была добавлена дорожка. И мне пришлось бы … сериализовать в json для сохранения в БД, что грубо.

  • Может существовать Listen объект, который добавляется в Listens таблицу каждый раз, когда воспроизводится трек, и итоговые значения трека для каждого пользователя могут быть восстановлены из него. Именно так работают многие системы оценки звезд. Но мне это кажется расточительным, когда все, что я действительно хочу отслеживать, — это пара десятков целых чисел для каждого пользователя. И восстановление данных, которые я хочу, кажется ненужным

  • Не похоже, что отношение «многие ко многим» вполне соответствует проблеме. У каждого трека будет много пользователей (которые прослушали), но не указано, сколько раз. И у каждого пользователя было бы много треков (которые они слышали), но теперь снова подсчитайте.

Есть ли какой-нибудь более чистый способ получить это?

Ответ №1:

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

Если вам действительно не нравится идея добавления записи для каждого прослушивания трека, вы могли бы просто добавить запись при первом прослушивании для каждого пользователя и заставить ее содержать счетчик, который увеличивается при последовательных прослушиваниях. Однако я думаю, что это хуже, поскольку позже будет сложно расширить; скажем, например, если вы хотите также отслеживать даты прослушивания. Вам также придется проявлять особую осторожность при увеличении счетчика в параллельных ситуациях.

Комментарии:

1. Я думал, что это может быть так. Это просто кажется немного чрезмерным, но я думаю, что это не совсем дорого с точки зрения ресурсов.