dbcontext.Add和dbcontext.AddObject有什么区别

我是WPF的初学者。 我想知道dbcontext.Adddbcontext.AddObject之间的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`

还建议哪一个更好。 谢谢。

实际上,您正在讨论旧ObjectContext使用的ObjectSet类的AddObject方法。 但是,由于Entity Framework 4我们有DbContext类(它是旧ObjectContext的包装器)。 这个新类使用DbSet而不是旧的ObjectSet 。 新的set类有方法Add

所以,回到差异。 旧实现调用了ObjectContext AddObject方法:

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

新实现做同样的事情(参见action参数):

 public virtual void Add(object entity) { ActOnSet(() => ((InternalSet) this).InternalContext.ObjectContext.AddObject(((InternalSet) 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更易于使用。

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

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

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

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

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时会发生这种情况。 您需要通过并将所有方法调用更改为我们

如果您想要使用AddObject有一些核心原因,那么请更详细地解释您的需求,以便有人能够更好地为您提供帮助。