Почему эти записи записываются в базу данных в случайном порядке? - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть метод, который создает список дней недели на основе двух переменных формы, NumOfDays и FirstDay, и записывает его в базу данных.Если я создаю периоды из 16 или менее дней, все дни записываются в базу данных в идеальном порядке, но если я пытаюсь создать период из 17 или более дней, порядок, по-видимому, случайный.

Здесьмой метод:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(int NumOfDays, int FirstDay,
    [Bind("BranchId,Title")] SchedulePeriod schedulePeriod)
{
    if (ModelState.IsValid)
    {
        SchedulePeriodViewModel vm = auto.Map<SchedulePeriodViewModel>(schedulePeriod);
        vm.NumOfDays = NumOfDays;
        vm.FirstDay = FirstDay;
        SchedulePeriodValidator validator = new SchedulePeriodValidator();
        ValidationResult result = validator.Validate(vm);
        if (result.IsValid)
        {
            List<ScheduleDay> days = new List<ScheduleDay>();
            string[] dayNames = { "Monday", "Tuesday", "Wednesday", 
                "Thursday", "Friday", "Saturday", "Sunday" };
            for (int i = 0; i < vm.NumOfDays; i++)
            {
                days.Add(new ScheduleDay { Title = dayNames[(vm.FirstDay + i) % 7]} );
            }
            schedulePeriod.ScheduleDays = days;
            db.Add(schedulePeriod);
            await db.SaveChangesAsync();
            return RedirectToAction("Details", "SchedulePeriods", 
                new { id = schedulePeriod.Id });
        }
        else
        {
            // handle invalid validation result
        }
    }
    return View(auto.Map<SchedulePeriodViewModel>(schedulePeriod));
}

Вот модели для периодов:

public class SchedulePeriod
{
    public int Id { get; set; }
    public int BranchId { get; set; }
    public string Title { get; set; }

    public List<ScheduleDay> ScheduleDays { get; set; }
    public Branch Branch { get; set; }
}

public class ScheduleDay
{
    public int Id { get; set; }
    public int SchedulePeriodId { get; set; }
    public string Title { get; set; }

    public List<ScheduleShift> ScheduleShifts { get; set; }
    public SchedulePeriod SchedulePeriod { get; set; }
}

Почему он работает так, как ожидалось, для периодов до 16 дней, но постоянно дает сбой в 17 или более

1 Ответ

0 голосов
/ 02 декабря 2018

В концепции реляционной базы данных и MS SQL также нет упорядочивания строк / кортежей в таблице / отношении.Так что не стоит на это полагаться.Чтобы выполнить заказ, вам нужно использовать поле для этого, а затем использовать его в ORDER BY при запросе.

Из статьи Википедии для отношение :

Согласно определению тела, кортежи тела не появляются в каком-либо определенном порядке.

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