Можно ли предотвратить запись EF SaveChanges () в БД? - PullRequest
0 голосов
/ 21 июля 2010

У меня есть классы обслуживания на основе Entity Framework 4. Я хотел бы проверить их в базе данных, заполненной предварительно сгенерированными образцами данных.Проблема в том, что я хотел бы, чтобы тесты, независимо от того, пройдены они или нет, фактически не касались базы данных, чтобы ее можно было повторно использовать для других тестов.

Таким образом, я бы хотел, чтобы ObjectContext.SaveChanges притворилсячто все хорошо, и храните изменения в памяти, но молча опускайте их фактическое постоянство в источнике данных.Возможно ли это?

PS Мне известен шаблон хранилища, но я не хотел бы использовать его в этом случае.

Ответы [ 2 ]

1 голос
/ 21 июля 2010

Вам просто нужно обернуть свои тесты в транзакцию, которую вы не совершаете:

using(var context = new MyObjectContext())
{
    context.Connection.Open();
    using (var transaction = context.Connection.BeginTransaction())
    {
        // Your tests here
        ...

    } // At this point, the transaction is rolled back, since it hasn't been commited
}
0 голосов
/ 21 июля 2010

Я собираюсь выйти на конечность здесь с этим ... Я знаю, что это работает с linq-to-sql

Вы можете переопределить метод savechanges в вашем контексте / контейнере

и фактически удалить базу. SaveChanges ();

Это выглядит так:

public override int SaveChanges(SaveOptions options){
   return base.SaveChanges();
}

поэтому, если вы раскомментируете эту строку, вы можете адаптировать ее к вашей ситуации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...