查询以包含挂起的插入

时间:2012-02-16 19:54:59

标签: c# entity-framework

如何编写包含待处理插入的查询以及数据库中的记录?我正在使用EF 4.3 Code First。

实施例

Foo = new Foo { Bar = 5 };
dbContext.Set<Foo>.Add(foo);

IEnumerable<Foo> foos = dbContext.Set<Foo>.Where(f => f.Bar == 5).ToList();

ActOnFoos(foos);

dbContext.SaveChanges();

我希望foos包括数据库中的记录以及待处理插入的记录。我只获取数据库中的值。

在我的实际代码中,我会在运行查询之前插入/更新多个Foos。

修改

我正在寻找与Find具有类似行为的内容。 Find将首先检查上下文,然后在没有找到任何内容的情况下转到数据库。我想结合上下文和数据库的结果。

2 个答案:

答案 0 :(得分:3)

试试这个:

DbSet<Foo> set = dbContext.Set<Foo>();

Foo = new Foo { Bar = 5 };
set.Add(foo);

IEnumerable<Foo> foos = set.Local
                           .Where(f => f.Bar == 5)
                           .Union(set.Where(f => f.Bar == 5)
                                     .AsEnumerable());
ActOnFoos(foos);

dbContext.SaveChanges();

或更改操作顺序的更好选项:

DbSet<Foo> set = dbContext.Set<Foo>();

var data = set.Where(f => f.Bar == 5).AsEnumerable());

Foo = new Foo { Bar = 5 };
set.Add(foo);

IEnumerable<Foo> foos = set.Local.Where(f => f.Bar == 5);

ActOnFoos(foos);

dbContext.SaveChanges();

答案 1 :(得分:1)

我认为最好在事务中插入记录,如果你决定不想插入它们就回滚。