2

我有这样的代码

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

我做错了什么,为什么它不能那样工作?

4

3 回答 3

6

尝试查询本地对象

http://msdn.microsoft.com/en-us/library/gg696248(v=vs.103).aspx

context.Customers.Local.yourqueryhere

这将查询上下文跟踪的实体,包括尚未保存的实体。

于 2013-08-06T20:29:55.557 回答
3

因为var res = context.Customers.Where(c => c.Id == id);从数据库中读取。

context.Customers.Add(cust);仅在上下文中添加记录(在 EF 的上下文中更新对象图)context.SaveChanges();并将其保存到数据库中。

于 2013-08-06T20:27:43.800 回答
0

您没有插入记录。您刚刚将其添加到本地框的上下文中。.SaveChanges()将本地数据保存到数据库。由于查询始终针对数据库运行,并且您没有调用.SaveChanges()您的实体,因此查询未返回。

于 2013-08-06T20:28:57.527 回答