@csharpnoob

Как реализовать generic репозиторий в c#?

Хочу создать многоязычный проект, на котором все материалы, хранимые в БД будут многоязычны. В БД все будет храниться следующим образом:
644d384c9e3942808ab94ead737255c4.jpg
В проекте я разделяю сущности на обычные, переводимые и сущности-переводы.
Обычные сущности содержат только Id.
Переводимые сущности происходят от обычных и в свою очередь содержат коллекцию переводов.
Переводы содержат Id переводимой сущности и Id языка.
Есть следующая проблема: Id сущности может быть либо int, либо long. Получается, что необходимо из-за этого все классы сущностей делать generic.
Как бы вы лучше реализовали репозитории для указанных сущностей?
  • Вопрос задан
  • 272 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Зачем вам дженеричные сущности? Вам же очевидно, какие там должны быть ключи. "дженеричность" заканчивается на имплементации базового репозитория
class BaseRepository<TEntity, TKey> 
            where TEntity: class
{ 
    ...
    public TEntity GetById(TKey id)
    {
        _context.Set<TEntity>().Find(id); // в случае EF
    }
    ...
} 

class TranslationRepository: BaseRepository<Translation, int>, ITranslationRepository 
{ ... }


ЗЫ По сути, у вас должнно быть 2 сущности:
  1. текст (включая "оригинал", ибо он тоже на каком-то языке написан)
  2. язык

Для каждой свой репозиторий, а над ними общий локализационный сервис.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы