Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ObjectSet的优点是什么_C#_Entity Framework - Fatal编程技术网

C# 使用ObjectSet的优点是什么

C# 使用ObjectSet的优点是什么,c#,entity-framework,C#,Entity Framework,正如建议的那样,我们可以使用以下对象上下文 using (AdventureWorksEntities context = new AdventureWorksEntities()) { // Add the new object to the context. context.Products.AddObject(newProduct); } using (AdventureWorksEntities context = new AdventureWorksEntities(

正如建议的那样,我们可以使用以下对象上下文

using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    // Add the new object to the context.
    context.Products.AddObject(newProduct);
}
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    ObjectSet<Product> pSet = context.CreateObjectSet<Product>();
    pSet.AddObject(newProduct);
}
但是,还有另一种类似的代码用法,即使用
ObjectSet

using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    // Add the new object to the context.
    context.Products.AddObject(newProduct);
}
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    ObjectSet<Product> pSet = context.CreateObjectSet<Product>();
    pSet.AddObject(newProduct);
}
使用(AdventureWorksEntities上下文=新建AdventureWorksEntities())
{
ObjectSet pSet=context.CreateObjectSet();
pSet.AddObject(新产品);
}
文章第二段说:

在以.NET Framework版本4开始的版本中,可以使用 以下方法是在ObjectSet上定义的,而不是等效的 在对象上下文上定义的对象


使用
而不是
ObjectContext
是否有特殊原因?我们如何知道何时使用哪个?

ObjectContext
ObjectSet
是遗留EF代码,为此,
DbSet
DbContext
创建了
ObjectContext
模型的包装器,使EF成为更好的体验

DbSet
DbContext
下面,EF仍在使用
ObjectContext
/
ObjectSet

从EF7开始,他们去掉了所有的基本代码,并重新编写了整个EFORM

编辑

DbContext
=您的实体模型、数据库连接、日志记录、跟踪和粘合的集合,可能还有我错过的一大堆东西。这通常包含一个或多个
dbset

DbSet
是表示特定实体集合的对象。其中仅包含特定实体的缓存、插入、更新和选择等信息

我喜欢把这些想象成一个

DbContext
=数据库

DbSet
=表

它们远远不止于此,但从概念上讲,这就是我想象它们的方式,不一定映射为1:1。例如,一个实体可能是一个表的子集,甚至可能是多个表的组合

关于
ObjectSet
ObjectContext
我缺乏它们内部工作的经验,无法告诉您具体的区别。我知道DbSet/Context是如何工作的,但我不知道有多少是由ObjectSet/Context完成的,还有多少是额外的


也许是你在野外的一次锻炼-P

如果直接使用ObjectSet,没有太大区别

但是,通过同时使用ObjectContext和OBjectSet,您可以开发可重用的通用存储库类(CRUD)。您提供的代码示例仅适用于检索该应用程序的产品,而通用CRUD存储库将定义添加、读取、更新和删除的方法,这些方法可用于任何表(以及其他数据库)

e、 g。 您可以定义IRepository接口

public interface IRepository<T> : IDisposable where T : class
{
    void Add(T entity);
    void Delete(T entity);
    void SaveChanges();
    ...
}

如果我想实现相同的模式,但不是“保存”,而是想创建一个接收T实体并更新数据库的更新方法,该怎么办?
using(var repo = new ProductsRepo())
{
    repo.Add(newProduct);
    repo.SaveChanges();
}