Общая проблема репозитория EF4 Code First - PullRequest
1 голос
/ 07 августа 2010

У меня небольшая проблема при использовании универсального репозитория с EF4.Сначала позвольте мне показать вам код, который я использую для доступа к коллекции объектов (это код в общем репозитории):

 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).Но после того как я отредактировал эту книгу, я не вызывал Сохранить изменения в контексте данных.

И есть проблема, хотя я не сохранил изменения, FindAll (в данном случае книга) возвращаеткнига с отредактированными значениями.Однако, когда я проверяю DbSet (требуется зарегистрировать класс для использования в Code First), его нет в этой коллекции.

Итак, мне не удалось отследить какую-либо документацию по этому поведениюЯ ли сам и пропускаю очевидное.

Помогите мееееееееееееееееееееееееее :))

1 Ответ

1 голос
/ 07 августа 2010

Используете ли вы тот же DataContext?DataContext кэширует незафиксированные изменения и возвращает их при последующих запросах, независимо от того, вызвали ли вы SaveChanges () или нет.Если вы хотите избежать извлечения незафиксированных изменений, вам необходимо создать новый или альтернативный контекст.

...