dbcontext之间的区别是什么.添加和dbcontext.AddObject

本文关键字:dbcontext AddObject 添加 区别 之间 是什么 | 更新日期: 2023-09-27 18:27:50

我是WPF的初学者。我想知道dbcontext.Adddbcontext.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"的定义,也找不到接受类型为"System.Data.Intity.Db Set"的第一个参数的扩展方法"AddObject"(是否缺少using指令或程序集引用?)C:''Documents''Visual Studio 2012''Projects''WpfApplication9''WpfApplication9''MainWindow.xaml.cs 49 31 WpfApplication9 `

还建议哪一个更好。非常感谢。

dbcontext之间的区别是什么.添加和dbcontext.AddObject

实际上您谈论的是旧ObjectContext使用的ObjectSet<TEntity>类的AddObject方法。但由于EntityFramework4,我们有了DbContext类(它是旧ObjectContext的包装器)。这个新类使用DbSet<TEntity>而不是旧的ObjectSet<TEntity>。新的集合类具有方法Add

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

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更易于使用。

调用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

您的错误表明该方法不可用。我发现当您切换到实体框架的新版本时会发生这种情况。您需要通过并将所有方法调用更改为我们的Add

如果你想使用AddObject有一些核心原因,那么在这里更详细地解释你的需求,这样别人就能更好地帮助你。