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();
}