В чем разница между 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, а затем более подробно объясните, какие ваши потребности здесь, чтобы кто-то мог вам помочь.