Порядок вставки нескольких записей в Entity Framework

У меня возникают проблемы с переупорядочением вкладок в EF, когда я пытаюсь добавить объект с несколькими дочерними элементами одновременно. У меня есть трехуровневая структура с отношениями один-ко-многим между каждым (Outer 1--* Item 1--* SubItem). Если я пытаюсь вставить новый Outer с Предметами и Подэлементами, Предметы, которые содержат Подэлементы, заканчиваются тем, что были вставлены первыми.

Пример кода (.NET 4.5, EF 5.0.0-rc):

public class Outer
{
    public int OuterId { get; set; }
    public virtual IList<Item> Items { get; set; }
}

public class Item
{
    public int OuterId { get; set; }
    [ForeignKey("OuterId")]
    public virtual Outer Outer { get; set; }

    public int ItemId { get; set; }
    public int Number { get; set; }

    public virtual IList<SubItem> SubItems { get; set; }
}

public class SubItem
{
    public int SubItemId { get; set; }

    [ForeignKey("ItemId")]
    public virtual Item Item { get; set; }
    public int ItemId { get; set; }
}

public class MyContext : DbContext
{
    public DbSet<Outer> Outers { get; set; }
    public DbSet<Item> Items { get; set; }
    public DbSet<SubItem> SubItems { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        Database.SetInitializer(new DropCreateDatabaseAlways<MyContext>());
        MyContext context = new MyContext();

        // Add an Outer object, with 3 Items, the middle one having a subitem
        Outer outer1 = new Outer { Items = new List<Item>() };
        context.Outers.Add(outer1);
        outer1.Items.Add(new Item { Number = 1, SubItems = new List<SubItem>() });
        outer1.Items.Add(new Item { Number = 2, SubItems = new List<SubItem>(new SubItem[] { new SubItem() }) });
        outer1.Items.Add(new Item { Number = 3, SubItems = new List<SubItem>() });

        context.SaveChanges();

        // Print the order these have ended up in
        foreach (Item item in context.Items)
        {
            Console.WriteLine("{0}\t{1}", item.ItemId, item.Number);
        }
        // Produces output:
        // 1       2
        // 2       1
        // 3       3
    }
}

Я знаю оэтот ответ Алекс Джеймс в котором говорится, что вставки могут нуждаться в переупорядочении для удовлетворения реляционных ограничений, но это не проблема здесь. В его ответе также упоминается, что они не могут отслеживать порядок элементов в структурах, сохраняющих порядок, таких как списки.

Я хотел бы знать, как я могу заказать эти вкладыши. Хотя я могу рассчитывать на сортировку вставленных элементов по полям, отличным от PK, гораздо эффективнее, если я могу полагаться на порядок PK. Я действительно не хочу использовать несколько вызовов SaveChanges для достижения этой цели.

Я использую EF5 RC, но, судя по другим оставшимся без ответа вопросам, это уже давно!

Ответы на вопрос(3)

Ваш ответ на вопрос