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

标签 c# .net entity-framework

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

相关文章:

c# - 将引用 C++/CLI 包装器的 UserControl 添加到表单的非托管 dll 时出现问题

c# - Fluent API 中的快捷方式可根据需要设置多个属性

c# - DDD、EF、聚合

c# - WPF 将对象传递给数据网格的转换器并更改一个单元格的颜色

c# - 如何终止在非托管代码中阻塞的托管线程?

.net - 转义 SQL 查询 - 支持 .Net 中的不同数据库平台

c# - 处理异常、错误和返回值的问题

entity-framework - Microsoft.EntityFrameworkCore.Tools.DotNet v2.0.1

c# - 在 C# 对象中显示外键对象名称的最佳实践

c# - 如何使用 C# 将所有特殊字符替换为字符串