0
        TestEntities context = new TestEntities();

        var item = context.TestTables.Single(s => s.ID == 1);//item.Name is "Giorgi"

        item.Name = "Hello";

        var item1 = context.TestTables.Single(s => s.ID == 1);

        Console.WriteLine(item1.Name);

        context.SaveChanges();

你希望写什么?你好写!为什么?

        TestEntities context = new TestEntities();

        var item = context.TestTables.Single(s => s.ID == 1);//item.Name is "Giorgi"

        item.Name = "Hello";

        var item1 = context.TestTables.Single(s => s.ID == 1);

        context.SaveChanges();

        Console.WriteLine(item1.Name);

你希望写什么?你好写!为什么? *
有两个不同的问题
*

4

3 回答 3

2

您的更改会在上下文中注册,但在调用 SaveChanges 之前不会保存到数据库中。如果您需要原始值,您可以打开一个新上下文、重新加载实体或检查更改跟踪器是否有更改。

添加了测试:

[Fact]
public void TestUsingNewContext()
{
    using (var context = new TestEntities())
    {
        var item = context.TestTables.Single(s => s.ID == 1);
        item.Name = "Hello";

        using (var newContext = new TestEntities())
        {
            var item1 = newContext.TestTables.Single(s => s.ID == 1);

            Assert.Equal("Giorgi", item1.Name);
        }
    }
}

[Fact]
public void TestUsingReload()
{
    using (var context = new TestEntities())
    {
        var item = context.TestTables.Single(s => s.ID == 1);
        item.Name = "Hello";

        context.Entry(item).Reload();

        var item1 = context.TestTables.Single(s => s.ID == 1);

        Assert.Equal("Giorgi", item1.Name);
    }
}

[Fact]
public void TestUsingChangeTracker()
{
    using (var context = new TestEntities())
    {
        var item = context.TestTables.Single(s => s.ID == 1);
        item.Name = "Hello";

        foreach (var entry in context.ChangeTracker.Entries<TestTable>().Where(e => e.State == EntityState.Modified))
        {
            entry.CurrentValues.SetValues(entry.OriginalValues);
        }

        var item1 = context.TestTables.Single(s => s.ID == 1);

        Assert.Equal("Giorgi", item1.Name);
    }
}
于 2013-02-09T21:44:00.483 回答
0

在这两种情况下,item 和 item1 都与上下文中的相同实体链接。EntityFramework 为您在上下文中存储实体。我想当您再次选择它时,它会返回缓存副本。当您在上下文中更改某些实体时,使用此上下文的任何人都会看到这种变化。更改仅在提交后才进入数据库。

using(TestEntities context = new TestEntities())
{
       var item = context.TestTables.Single(s => s.ID == 1);//item.Name is "Giorgi"

       item.Name = "Hello";

       using(TestEntities context = new TestEntities())
       {
           var item1 = context.TestTables.Single(s => s.ID == 1);
           Console.WriteLine(item1.Name); // you will get old value here
       }
}

尝试在 msdn 中阅读有关它的信息。因为这里水下有很多石头。例如:如果有人更改了您在 db 中的实体,然后您尝试提交更改,将会发生什么?

http://msdn.microsoft.com/en-us/data/ee712907 http://msdn.microsoft.com/en-us/data/jj592904.aspx

于 2013-02-09T21:38:37.933 回答
0

“上下文”存在于内存中,因此当您在上下文中更改内容时,它们不会在数据库中更改,而是在“上下文”(内存)中更改,只有当您调用 context.SaveChanges() 时,您才会真正持久化更新/更改数据库。

如果不实际保存更改,为什么需要 SaveChanges() ..

于 2013-02-09T21:48:19.580 回答