Как представить отношение «количество игр» в Entity Framework - Code First - PullRequest
0 голосов
/ 07 апреля 2019

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

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

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

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

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

1 Ответ

1 голос
/ 07 апреля 2019

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

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

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