14

I am beginner at WPF. I want to know that what is difference between dbcontext.Add and dbcontext.AddObject.

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

I want to achieve this dbcontext.AddObject(). But I get an error:

'System.Data.Entity.DbSet' does not contain a definition for 'AddObject' and no extension method 'AddObject' accepting a first argument of type 'System.Data.Entity.DbSet' could be found (are you missing a using directive or an assembly reference?) C:\Documents\Visual Studio 2012\Projects\WpfApplication9\WpfApplication9\MainWindow.xaml.cs 49 31 WpfApplication9`

Also suggest which one is better. Thank you.

4

3 回答 3

15

实际上,您正在谈论old 使用的类AddObject方法。但是从 Entity Framework 4 开始,我们有了类(它是 old 的包装器)。这个新类使用而不是 old 。新的集合类有方法。ObjectSet<TEntity>ObjectContextDbContextObjectContextDbSet<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更易于使用。

于 2013-08-14T12:38:51.307 回答
1

在 ObjectContext 上调用 AddObject 以将对象添加到对象上下文。

当对象是数据源中尚不存在的新对象时,请执行此操作。

当您在对象上下文中创建与另一个对象相关的新对象时,请使用以下方法之一添加该对象: 调用 EntityCollection 上的 Add 方法并指定相关对象。

于 2013-08-14T12:51:53.160 回答
0

短处似乎是它们大致相同。我发现这篇博文有点简短和重点:

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 有一些核心原因,请在此处更详细地说明您的需求,以便有人可以更好地帮助您。

于 2013-08-14T12:58:15.513 回答