IList<>保证C#

时间:2016-11-25 09:03:49

标签: c# entity-framework list

我使用Seed()类的Configuration.cs方法在使用Update-Database命令时填充数据库中的数据。

除此之外,我正在创建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表中的数据没有正确的顺序:

enter image description here

正如您在InternshipTraining Programs切换位置上看到的那样,与CreateEventCategoriesTestDefinition()方法中添加的顺序相比较。

有人知道这里发生了什么吗?为什么不保留添加顺序?我知道它应该在List<>中得到坚持,但IList<>不一样吗? 或者这可能与EntityFramework有关?

1 个答案:

答案 0 :(得分:0)

如果您依赖数据库进行排序,那么。

  1. 关闭自动ID增量并指定您自己的ID

    EventCategory(int id,string name)

  2. 如果必须使用数据库标识,请尝试使用对象的排序顺序(int)列

    EventCategory(字符串名称,int sortOrder)

  3. 无论哪种方式,您都无法保证您会将已排序的列表持久保存到数据库中。我不能肯定地说你的用例,但你不应该回复SQL来为你排序对象,但是在查询数据库时使用linq在绑定到视图之前对它们进行排序。

    e.g。

    var mySortedCategories = dbContext.EventCategories.OrderBy(x => x.Name).ToList();