Проект (сущность Project в БД или ProjectInfo) основная сущность в JoinRpg. Почти любой запрос или действие идут в контексте конкретного проекта. Почти все данные проекта можно получить из ProjectInfo. Чтобы получить ProjectInfo, можно вызывать IProjectMetadataRepository.GetProjectMetadata. Это действие почти бесплатно (т.к. в рамках обработки конкретного веб-запроса ProjectInfo почти всегда в кеше).
Все настройки проекта, которые настраивает или меняет мастер.
- Персонажи (Character) и все их зависимые сущности — Claim, Comment и прочее.
- Все, не связанное с проектом
- То, что редко применяется и занимает много места — например анонс проекта.
- Нужно добавить новую сущность в JoinRpg.DataModel и не забыть сделать миграцию.
- Добавить какой-то иммутабельный объект (например record), описывающий сущность, в JoinRpg.PrimitiveTypes.ProjectMetadata
- Добавить его в ProjectInfo
- Добавить загрузку этой сущности в ProjectLoaderCommon.GetProjectWithFieldsAsync чтобы не плодить LazyLoad
- Добавить меппинг из БД в ProjectMetadataRepository.CreateInfoFromProject
- Миграции Entity Framework — как создавать и применять миграции