我是 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' 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`
还建议哪个更好。谢谢。
最佳答案
其实你说的是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);
}
新实现做同样的事情(见 Action 参数):
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
更易于使用。
关于c# - dbcontext.Add 和 dbcontext.AddObject 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18231889/