通用存储库问题EF4代码优先

时间:2010-08-07 06:17:35

标签: entity-framework entity

在使用EF4的通用存储库时,我遇到了一些问题。首先让我向您展示我用来访问对象集合的代码(这是通用reposiroy中的代码):

 public IEnumerable<T> FindAll<T>() where T : class
    {
        return ObjectContext.CreateObjectSet<T>();
    }

下面是为Book

类型的存储库调用此代码的示例
_returnedBooks = _dataContext.FindAll<Book>()
            .Where(b => b.Title == _editedtitle && b.Description == _editedDescription && b.ImageUrl == _editedImageUrl);

上面的代码显示我查询了一本书的数据上下文,该书的属性与我以前用于编辑书籍的值相匹配(因此是_edited前缀)。但是一旦我编辑了本书,我就没有在数据上下文中调用Save Changes。

有问题,即使我没有保存更改,FindAll(在本案例书中)也会返回带有编辑值的书。但是,当我检查DbSet(需要注册该类以用于Code First)时,它不在该集合中。

所以,我没有设法找到这种行为的任何文档,或者我自己是否错过了明显的文档。

帮助meeeeeeeeeeeeeeeeeeeeeeeeeeeee:)

1 个答案:

答案 0 :(得分:1)

您使用的是同一个DataContext吗?无论您是否调用了SaveChanges(),DataContext都会缓存未提交的更改并在后续查询中返回它们。如果您想避免检索未提交的修改,则需要新建一个新的或备用的上下文。