Код EF4 сначала добавляет элементы, которые мне не очень понятны

Я не понимаю, почему код сначала не добавляет новый элемент в коллекцию до тех пор, пока не будет вызван savechanges. Я установил EF4.1 из NuGet (4.1.10331.0). Я создал следующий пример:

public class TinyItem
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class TinyContext : DbContext
{
    public virtual DbSet<TinyItem> Items { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        using (var ctx1 = new TinyContext())
        {
            ListItems(ctx1, "Start");

            ctx1.Items.Add(new TinyItem { Name = "Test1" });
            ListItems(ctx1, "After add");

            ctx1.SaveChanges();
            ListItems(ctx1, "After commit");
        }

        Console.ReadKey();
    }

    public static void ListItems(TinyContext ctx, string label="")
    {
        Console.WriteLine("=========================================");
        Console.WriteLine(label);
        Console.WriteLine(string.Format("Items.Local: {0}", ctx.Items.Local.Count));
        foreach (var item in ctx.Items.Local)
        {
            Console.WriteLine(string.Format("{0} = {1}", item.Id, item.Name));
        }
        Console.WriteLine(string.Format("Items: {0}", ctx.Items.Count()));
        foreach (var item in ctx.Items)
        {
            Console.WriteLine(string.Format("{0} = {1}", item.Id, item.Name));
        }
        Console.WriteLine("=========================================");
    }

Сначала я добавил одну запись в базу данных. Затем я запустил это и получил следующие результаты:

    =========================================
    Start
    Items.Local: 0
    Items: 1
    4 = Test1
    =========================================
    =========================================
    After add
    Items.Local: 2
    4 = Test1
    0 = Test1
    Items: 1
    4 = Test1
    =========================================
    =========================================
    After commit
    Items.Local: 2
    4 = Test1
    5 = Test1
    Items: 2
    4 = Test1
    5 = Test1
    =========================================

Мои вопросы: - Почему при первом обращении к ctx.Items.Local мои элементы не отображаются? - Почему список ctx.Items не содержит только что добавленного элемента до того, как я вызвал SaveChanges?

5
задан Eranga 15 July 2012 в 06:13
поделиться