我有这样的代码
var context = new MyDbContext(); // db context generated from database
var id = Guid.NewGuid();
var cust = new customer()
{ Id = id, Name = "John" };
context.Customers.Add(cust);
// context.SaveChanges();
var res = context.Customers.Where(c => c.Id == id);
MessageBox.Show(res.Count().ToString());
我在表中插入了一条记录,当我运行查询时,我希望结果将包含这条新记录。但事实上它没有。它只有在我之前创建SaveChanges()时才有效。
我做错了什么,为什么不这样做?
答案 0 :(得分:6)
尝试查询本地对象
http://msdn.microsoft.com/en-us/library/gg696248(v=vs.103).aspx
context.Customers.Local.yourqueryhere
这将查询上下文跟踪的entites,包括尚未保存的内容。
答案 1 :(得分:3)
因为var res = context.Customers.Where(c => c.Id == id);
从数据库读取。
context.Customers.Add(cust);
仅在上下文中添加记录(在EF的上下文中更新对象图),context.SaveChanges();
将其保存到数据库中。
答案 2 :(得分:0)
您没有插入记录。您刚刚将其添加到本地框中的上下文中。 .SaveChanges()
将您的本地数据保存到数据库中。由于查询始终针对数据库运行,并且您未调用.SaveChanges()
,因此未从查询中返回您的实体。