【发布时间】:2016-11-25 09:03:49
【问题描述】:
当使用 Update-Database 命令时,我正在使用 Configuration.cs 类的 Seed() 方法在数据库中填充数据。
除此之外,我正在创建这样的 EventCategory 对象列表:
private IList<EventCategory> CreateEventCategoriesTestDefinition()
{
eventCategories = new List<EventCategory>();
var eventCategoryRecruitment = new EventCategory("Recruitment");
eventCategories.Add(eventCategoryRecruitment);
var eventCategoryInternship = new EventCategory("Internship");
eventCategories.Add(eventCategoryInternship);
var eventCategoryTrainingPrograms = new EventCategory("Training Programs");
eventCategoryTrainingPrograms.Events
.Add(new Event("Managerial Training Program 2012-2014", eventCategoryTrainingPrograms));
eventCategories.Add(eventCategoryTrainingPrograms);
var eventCategoryEmployee = new EventCategory("Employee & Team Potential");
eventCategories.Add(eventCategoryEmployee);
return eventCategories;
}
逐个元素添加。 eventCategory 只是一个私有属性:
private IList<EventCategory> eventCategories;
从Seed() 方法我调用CreateEventCategoriesTestDefinition()
几乎一切都很好,但是当我去数据库检查数据时,我注意到 EventCategory 表中的数据没有正确的顺序:
正如您在图片上看到的那样,Internship 和 Training Programs 切换位置与添加 inCreateEventCategoriesTestDefinition() 方法的顺序相比。
有人知道这里发生了什么吗?为什么不保留添加顺序?我知道它应该在List<> 中保留,但对于IList<> 不一样?
或者这可能与EntityFramework有关?
【问题讨论】:
-
EF 不保证保存更改时的插入顺序。它会在它认为合适的时候从对象图中构建查询。至于
IList<>,那只是一个接口:实现是维护或不维护顺序的实现......接口不做任何事情 -
List(实现)保证项目的顺序。我认为这个问题与 EF 有关。
-
列表保证排序但数据库不是因为表没有隐式顺序。您需要在您的
SELECT声明中应用ORDER BY。如果您需要保留插入顺序,则必须将其存储在CreatedAt datetime或Position int等列中。然后将它们用于ORDER BY。 -
只需使 Id 列不自动递增并自己提供值(1 表示招聘等)。
标签: c# entity-framework list