#c# #entity-framework #entity-framework-core
#c# #entity-framework #сущность-фреймворк-ядро
Вопрос:
Я хочу создать три таблицы:
Tasks
— в этой таблице хранится информация в виде идентификаторов, имен, приоритета задачTakenTasks
— в этой таблице мы храним идентификатор пользователя, который принимает задачи с датой и временемEndedTasks
— Задача, которая заканчивается датой и временем окончания
Мой вопрос в том, как создать в EntityFramework Core
таблице TakenTasks
и EndedTasks
сопоставить те же свойства с Tasks
таблицей, не переписывая код для идентификаторов задач, названия задач и т. Д.?
Tasks
таблица может быть построена на основе abstract Task
класса, потому что я хочу иметь объект Task
в списке. Каково наилучшее решение для scenerio, как я упоминал выше?
public class Task
{
int Id { get; set; }
string Name { get; set; }
Priority Priority { get; set; }
}
public class TakenTask
{
string UserId { get; set; }
DateTime DateOfTaken { get; set; }
}
public class EndedTask
{
DateTime DateOfEnd { get; set; }
}
Как хранить информацию из Task
in TakenTask
и EndedTask
withotu, переписывая свойства из Task
и иметь 3 таблицы?
Комментарии:
1. Не лучше ли было бы нормализовать таблицу 3 и просто использовать таблицу 1 с флагом, чтобы указать, что она занята или закончена
2. Но что лучше? Что обычно используется в реальной среде?
Ответ №1:
Вам не нужно дублировать столбцы в трех таблицах, используйте внешний ключ от TakenTasks
и EndedTasks
до Task
, и вы можете создать a public virtual Task ParentTask{ get; set; }
в обоих TakenTasks
, EndedTasks
чтобы получить доступ к свойствам задачи
Ответ №2:
Я думаю, вам нужно 2 таблицы:
Task
Assign
В Task
должно быть
int Id { get; set; }
string Name { get; set; }
Priority Priority { get; set; }
Status Status { get; set; }
В Assign
должно быть
int TaskId { get; set; }
int UserNameId { get; set; }
DateTime StartDate { get; set; }
DateTime EndDate { get; set; }`
Надеюсь, это поможет