c# - 为什么这些记录以看似随机的顺序写入数据库?
问题描述
我有一个方法,它基于两个表单变量创建一个工作日列表,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 天或更长时间内一直失败?
解决方案
在关系数据库概念和 MS SQL 中,表/关系中的行/元组也没有排序。所以你不应该依赖它。要实现排序,您需要为此使用一个字段,然后在ORDER BY
查询时使用它。
来自维基百科的关系文章:
在 body 的定义下,body 的元组不会以任何特定的顺序出现。
推荐阅读
- postgresql - 通过 docker 卷从主机连接到 docker postgres 套接字
- sql - 将单列数据转换为多行
- java - 从一个控制器方法获取会话对象到另一个
- jquery - 如何切换使用滚动(功能)的元素?
- python - Openpyxl 无法读取引用它之前写入的单元格的函数值
- javascript - 需要重新指定实现接口方法的类方法的参数类型?
- vb.net - 运行应用程序时字体只会更改一次
- python - 如何为 Python 中的线程设置异步事件循环?
- python - 如何同步执行操作以进行内存管理?
- sql-server - 没有重复项的 SQL Server 数据