Entity Framework 4: добавление извлеченного объекта не будет отображаться в счетчике до сохранения - PullRequest
0 голосов
/ 19 апреля 2011

У меня есть объект «Инвестиции», производный от «BaseEntity».Если я создаю и добавляю новую «Инвестицию» следующим образом:

investment = new Investment();
investment.Name = "Investment 01";
_context.BaseEntities.AddObject(entity);

и запрашиваю счет (до сохранения изменений)

_context.BaseEntities.OfType<Investment>().Count();

, он возвращает ноль.Эта же строка возвращает 1 после _context.SaveChanges ();

Что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 19 апреля 2011

Вы не делаете ничего плохого. Вот как работает EF. В базу данных не вносятся изменения, пока вы не выполните SaveChanges - это называется единицей работы. Вы подготавливаете все изменения в памяти, а затем сохраняете их все вместе в одной транзакции.

0 голосов
/ 19 апреля 2011

Это правильное поведение, поскольку объект находится в диспетчере состояний, пока вы не вызовете SaveChanges ().Только после вызова SaveChanges () объект станет доступным для вашего счета.

0 голосов
/ 19 апреля 2011

Объект, который все еще находится в состоянии вставки, не будет включен в результаты запроса, поскольку объект не был сохранен с помощью SaveChanges()

. При выполнении метода _context.BaseEntities.OfType<Investment>().Count(); запрос будет отправлен на сервер SQL.и вернуть результаты, найденные в базе данных.

При использовании метода GetObjectByKey способ извлечения объекта из экземпляра контекста, если он был ранее загружен, который находится в ObjectContext, также будетреагируют так же.Поскольку объект находится в состоянии new / insert, контекст будет обрабатывать его как несуществующий до сохранения.

Редактировать:

В коде в вопросе, который вы используете _context, и в комментарииВы упоминаете _container.BaseEntities.Count ()

в чем разница между этими двумя объектами?

...