В чем разница между dbcontext.Add и dbcontext.AddObject

Я начинаю работать в WPF. Я хочу знать, что разница между dbcontext.Add и dbcontext.AddObject.

private void AddButton_Click(object sender, RoutedEventArgs e)
{
        Name employee = new Name();
        employee.Name1 = "Test";
        dataContext.Names.AddObject(employee);
}

Я хочу достичь этого dbcontext.AddObject(). Но я получаю сообщение об ошибке:

'System.Data.Entity.DbSet' не содержит определения для 'AddObject', и не может быть найден метод расширения 'AddObject', принимающий первый аргумент типа 'System.Data.Entity.DbSet' (вы отсутствуете директива using или ссылка на сборку?) C:\Documents\Visual Studio 2012\Projects\WpfApplication9\WpfApplication9\MainWindow.xaml.cs 49 31 WpfApplication9`

Также укажите, какой из них лучше. Спасибо.

Ответ 1

На самом деле вы говорите о AddObject методе класса ObjectSet<TEntity>, который использовался старым ObjectContext. Но поскольку Entity Framework 4 имеет класс DbContext (который является оберткой по старой ObjectContext). Этот новый класс использует DbSet<TEntity> вместо старого ObjectSet<TEntity>. Новый класс класса имеет метод Add.

Итак, вернемся к различиям. Старая реализация вызвала метод AddObject ObjectContext:

public void AddObject(TEntity entity)
{
    Context.AddObject(FullyQualifiedEntitySetName, entity);
}

Новая реализация делает то же самое (см. параметр действия):

public virtual void Add(object entity)
{
    ActOnSet(() => ((InternalSet<TEntity>) this).InternalContext.ObjectContext.AddObject(((InternalSet<TEntity>) this).EntitySetName, entity),  
              EntityState.Added, entity, "Add");
}

Как вы можете видеть, тот же метод ObjectContext.AddObject вызывается внутри. Что изменилось - ранее мы просто добавили объект в контекст, но теперь, если в ObjectStateManager существует запись состояния, мы просто меняем состояние записи на Added:

if (InternalContext.ObjectContext.ObjectStateManager.TryGetObjectStateEntry(entity, out entry))
{
    entry.ChangeState(newState); // just change state
}
else
{
    action(); // invoke ObjectContext.AddObject
}

Основная цель нового API упрощает использование DbContext.

Ответ 2

Вызов AddObject объекта ObjectContext для добавления объекта в контекст объекта.

Сделайте это, когда объект является новым объектом, который еще не существует в источнике данных.

При создании нового объекта, связанного с другим объектом в контексте объекта, добавьте объект, используя один из следующих способов: Вызовите метод Add на EntityCollection и укажите связанный объект.

Ответ 3

Короче говоря, похоже, что они примерно одинаковы. Я нашел этот пост в блоге немного коротким и точным:

http://blog.cincura.net/232485-someentityset-addobject-vs-addtosomeentityset-methods/

Вы также можете посмотреть MSDN, но в этом конкретном случае я нашел его немного загадочным.

http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.addobject.aspx

Ваша ошибка указывает, что метод недоступен. Я нахожу это, когда вы переключаетесь на новую версию Entity Framework. Вам нужно пройти и изменить все вызовы метода нам Add

Если есть какая-то основная причина, почему вы хотите использовать AddObject, а затем более подробно объясните, какие ваши потребности здесь, чтобы кто-то мог вам помочь.