gpt4 book ai didi

c# - dbcontext.Add 和 dbcontext.AddObject 之间有什么区别

转载 作者:可可西里 更新时间:2023-11-01 08:07:56 31 4
gpt4 key购买 nike

我是 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' 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com