Репозиторий на основе EF4.1 и согласованное представление данных - PullRequest
0 голосов
/ 02 марта 2012

с использованием шаблонов единиц работы и репозитория Я недавно столкнулся с проблемой, что изменения в единицах работы не отражаются в последующих запросах. Пример:

var ctx = DIContainer.Current.Resolve<IB2bContext>();
var rep = DIContainer.Current.Resolve<IRepository<Word>>(
                new DependencyOverride<IB2bContext>(ctx));

rep.Add(new Word () { "One" };
rep.Add(new Word () { "Two" };

rep.GetAll().ToList().ForEach(i =>
                Console.Write(i.text)); // nothing seen here

Другими словами, если я не вызову SaveChanges () для сохранения объектов в базе данных, я их не вижу. Ну, конечно, я могу возиться с ChangeTracker и / или делать такие вещи, как context.Entry (foo) .Property (...). CurrentValue. Но это играет с ddd как разъединение слоев? Я так не думаю. И где мой постоянный вид данных, который когда-то назывался транзакцией базы данных?

Пожалуйста, просветите меня. Armin

1 Ответ

2 голосов
/ 02 марта 2012

Ваш репозиторий предоставляет метод GetAll. Сам метод выполняет запрос к базе данных. Если вы хотите, чтобы локальные данные не вставлялись в базу данных, вы должны добавить их в набор результатов. Например, как:

public IEnumerable<Word> GetAll()
{
    DbSet<Word> set = context.Set<Word>();
    return set.AsEnumerable().Concat(set.Local);
}

Выполнение запроса отвечает только за возврат постоянных (реальных) данных.

...