2016-10-12 130 views
0

在应用程序中它具有数据访问层,其中具有DataEntityModel.edmx(实体框架模型)和存储库类。在实体框架中添加对象

enter image description here

下面的代码是我的仓库类。

namespace DataModel.Repository 
{ 
public class ProductRepository 
{ 
    internal WebApiDbEntities Context; 
    internal DbSet<Product> DbSet; 

    public ProductRepository(WebApiDbEntities context) 
    { 
     this.Context = context; 
     this.DbSet = context.Set<Product>(); 
    } 

    public virtual void Insert(Product entity) 
    { 
     DbSet.Add(entity); 
    } 

} 

}

问题是我已经使用DbSet.Add(实体)方法插入。但实体框架会生成它自己的Add方法Context.Products.Add(entity)

那么,这两种方法有什么区别。为什么大多数 时间DbSet.Add(实体)被使用??

回答

3

存储库取代了DbContext的使用。

所以要加一个实体,而不是

var dbContext = new WebApiDataModel(); 
dbContext.Products.Add(entity) 

您使用存储库:

var dbContext = new WebApiDataModel(); 
var productRepository = new ProductRepository(dbContext); 
productRepository.Insert(entity); 

最后,呼叫DbSet<Product>.Add(),但也有原因,你可能希望引入实体框架的存储库模式。

+0

我的问题是在productRepository.Insert()方法中我们可以调用dbContext.Products.Add(entity)方法。但为什么我们使用DbSet.Add(实体)而不是dbContext.Products.Add(实体)? –

+0

是的,你可以使用。有人(不是你,显然)决定引入存储库模式。你用它来抽象出DbContext的使用。所以是的,你可以同时使用,但你应该选择。 – CodeCaster