EntytyFrameworkCore. Подскажите по модели БД

346
16 мая 2017, 01:25

Планирую модель БД и столкнулся с тем что у меня много сязей между 3 таблицами со следуюшей зависимостью:

1-ая таблица базовая, 2-ая таблица дополнение первой таблицы уникальными свойствами, 3-я таблица хранит коллекцию элементов 2-ой таблицы.

Пример

// Станция. базовая таблица
public class StationDto : IEntitie
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Required]
    public int EcpCode { get; set; }
    [Required]
    public string Name { get; set; }

    public ICollection<StationsRouteDto> StationsRouteDto { get; set; }  //Один ко многим с StationsRouteDto
}

//Станция учавствующая в построении маршрута. дополнение станции.
public class StationsRouteDto : IEntitie
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public bool IsLanding { get; set; }                                               //флаг посадки.
    [Column(TypeName = "datetime2")]
    public DateTime? ArrivalTime { get; set; }                                         //Время прибытия поезда на станцию
    [Column(TypeName = "datetime2")]
    public DateTime? DepartureTime { get; set; }                                       //Время отправления поезда со станции

    public int StationDtoId { get; set; }
    public StationDto StationDto { get; set; }                                         //Станция
    public ICollection<RegShStationsRouteRoutes> RegShRoutes{ get; set; }               //Расписание, в которые входят данные станции
}

//Расписание. хранит коллекцию дополненных станций.
public class RegulatoryScheduleDto : IEntitie
{
    [Key]
    public int Id { get; set; }
    //Много настроек............
    public ICollection<RegShStationsRouteRoutes> Route { get; set; }          //маршрут
}

//промежуточная таблица для связи многие ко многим. через 2-е связи 1 ко многим.
public class RegShStationsRouteRoutes
{
    public int RegShId { get; set; }
    public RegulatoryScheduleDto RegulatoryScheduleDto { get; set; }
    public int StatRouteId { get; set; }
    public StationsRouteDto StationRouteDto { get; set; }
}

Изначально имею заполненный список станицй(StationDto). Необходимо создавать строчки расписания (RegulatoryScheduleDto).

ШАГИ: 1. Выбираю из списка StationDto.

  1. На базе выбранного объекта создаю StationsRouteDto, заполняя IsLanding, ArrivalTime, DepartureTime

  2. Выполняю поиск по совпадению всех значений созданного объекта StationsRouteDto в БД. Если станция с такими настройками уже есть, то присваиваю ID найденой станции своему созданному объекту.

  3. Таким образом (создавая новые StationsRouteDto или используя уже добавленные в бд) создаю List.

  4. Создаю объект RegulatoryScheduleDto, заполняя все настройки кроме Route.

  5. На базе созданного списка List создаю список RegShStationsRouteRoutes используя созданный объект RegulatoryScheduleDto для связи M2M.

  6. В объект расписания RegulatoryScheduleDto делаю присвоение св-ву Route, только что созданной проекцией списка в пункте 6.

  7. Делаю Save в БД.

Правильно ли я расписал шаги, или можно сделать оптимальнее? Т.е. код EF будет много, я думаю целесообразно сделать сервисов по доступу к данным и скрыть туда всю работу с репозиторием?

READ ALSO
Как вернуть блок на прежнее место спустя время?

Как вернуть блок на прежнее место спустя время?

Есть блок, который я отключаю с помощью SetActiveЗатем проверяю, активен ли объект с помощью ActiveSelf

273
Как задать таймаут для GET-запроса

Как задать таймаут для GET-запроса

Использую библиотеку xnetdll

354
Метод соприкосновения pictureBoxe`s

Метод соприкосновения pictureBoxe`s

Подскажите пожалуйста есть ли какой нибудь метод соприкосновения 2х пикчерБоксов в c#?

308