EF DbContext:将记录插入到表中(没有SaveChanges()),为什么不能在查询中获取它?

时间:2013-08-06 20:25:36

标签: c# entity-framework

我有这样的代码

        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()时才有效。

我做错了什么,为什么不这样做?

3 个答案:

答案 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(),因此未从查询中返回您的实体。