Entity Framework: ObjectSet.AddObject не добавляет объект?

#entity-framework

#entity-framework

Вопрос:

Я использую EF4 в VS2010, и у меня есть следующий код:

 MyEntity entity = null;
entity = MyEntity.CreateMyEntity(0);
context.MyEntities.AddObject(entity);
context.AcceptAllChanges();
context.SaveChanges();
  

Проблема в том, что AddObject() не добавляет объект в коллекцию, и я просто не могу понять, почему. Что происходит, когда я просматриваю код, так это то, что он переходит к первому свойству «CityId», которое, конечно, равно нулю, а затем, похоже, просто возвращается оттуда … как будто у него была проблема с тем, что свойство равно null. Единственным ненулевым полем в моей базе данных (MSSQL) является столбец Id, который является столбцом identity … Я в полном недоумении. Пожалуйста, помогите!

Заранее спасибо!

Мэтт

Комментарии:

1. Что делает MyEntity.CreateMyEntity(0); код? Я помню, что у меня были некоторые проблемы, когда я использовал объекты POCO и не использовал контекст. Метод CreateObject<T>() для создания объекта. Кроме того, проверьте окно стека в VS на наличие подозрительных вызовов метода EF — это может дать вам представление о том, что происходит. И снова — опубликуйте, настроен ли EF как POCO / Code-First и что делает MyEntity.CreateMyEntity() метод.

2. Спасибо за ваш ответ, Джеффим. MyEntity. Метод CreateMyEntity() фактически показывает вам, какие свойства необходимо заполнить (НЕ NULL в db).

Ответ №1:

Вы не должны вызывать метод accept all changes .

Комментарии:

1. Спасибо тебе, Акаш. Я не могу в это поверить. Что именно делает AcceptAllChanges()? В документации говорится: «Принимает все изменения, внесенные в объекты в контексте объекта». … в какой ситуации я бы вызвал этот метод?

2. Заражать его никогда не следует вызывать, поскольку он вызывается EF, когда изменения правильно сохраняются в базе данных. Если вы пытаетесь реализовать свой собственный способ взаимодействия с базой данных, вам следует использовать это.