首页 > 解决方案 > 为什么这些记录以看似随机的顺序写入数据库?

问题描述

我有一个方法,它基于两个表单变量创建一个工作日列表,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 天或更长时间内一直失败?

标签: c#sql-serverasp.net-coreentity-framework-core

解决方案


在关系数据库概念和 MS SQL 中,表/关系中的行/元组也没有排序。所以你不应该依赖它。要实现排序,您需要为此使用一个字段,然后在ORDER BY查询时使用它。

来自维基百科的关系文章:

在 body 的定义下,body 的元组不会以任何特定的顺序出现。


推荐阅读