dbcontext之间的区别是什么.添加和dbcontext.AddObject
本文关键字:dbcontext AddObject 添加 区别 之间 是什么 | 更新日期: 2023-09-27 18:27:50
我是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"的定义,也找不到接受类型为"System.Data.Intity.Db Set"的第一个参数的扩展方法"AddObject"(是否缺少using指令或程序集引用?)C:''Documents''Visual Studio 2012''Projects''WpfApplication9''WpfApplication9''MainWindow.xaml.cs 49 31 WpfApplication9 `
还建议哪一个更好。非常感谢。
实际上您谈论的是旧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有一些核心原因,那么在这里更详细地解释你的需求,这样别人就能更好地帮助你。