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);
你期望写什么?你好写的!的为什么吗
*
有两个不同的问题 *
答案 0 :(得分:2)
您的更改已在上下文中注册,但在您调用SaveChanges之前不会保存到数据库中。如果您需要原始值,则可以打开新上下文reload the entity或检查更改跟踪器是否有更改。
添加了测试:
[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);
}
}
答案 1 :(得分:0)
在两种情况下,item和item1在上下文中与同一实体链接。 EntityFramework存储实体在您的上下文中。当你再次选择它时我会回复它返回缓存的副本。当您在上下文中更改某个实体时,使用此上下文的任何人都会看到此更改。只有在comit之后,更改才会进入数据库。
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
答案 2 :(得分:0)
“上下文”存在于内存中,因此当您在上下文中更改内容时,它们不会在数据库中更改,但只有在您调用context.SaveChanges()时才会在“上下文”(内存)中更改它们持久化对数据库的更新/更改。
如果不实际保存更改,为什么还需要SaveChanges()..