美好的一天,
我使用存储库模式。但有人建议我使用包括工作单位。我读了很多文章,老实说,我发现一个文档是过于复杂,理解。
假如我有一个非通用存储库。
// My Interface
public interface IProductRepository{
IQueryable Products();
IQueryable ProductById(int id);
void InsertProduct(Product product);
void UpdateProduct(Product product);
void DeleteProductById(int id);
}
// Abstract Implementation
public class ProductRepository : IProductRepository{
private readonly MyDbContext context;
public ProductRepository(MyDbContext context){
this.context= context;
}
public IQueryable Products(){
context.Product();
}
public IQueryable ProductById(int id){
context.Product().Where(prod=>prod.Id == id);
}
public void InsertProduct(Product product){
context.Product.Add(product);
context.SaveChanges();
}
public void UpdateProduct(Product product){
context.Product.Update(product);
context.SaveChanges();
}
public void DeleteProductById(int id){
var product = ProductById(id);
context.Product.Remove(product);
context.SaveChanges();
}
}
我的问题是,我该如何使用工作单位吗?能否请您在下面给我一个代码。这将是这么多有用的,我听不懂。
在您的IProductRepository添加保存方法
// My Interface
public interface IProductRepository{
// ...
void Save();
}
然后,在混凝土ProductRepository,你做两件事情:
不要对的DbContext的所有操作,并在最后调用保存()。
static void main() {
// ...
this.productRepository.InsertProduct(product1);
this.productRepository.InsertProduct(product2);
this.productRepository.InsertProduct(product3);
this.productRepository.Save();
}
这是工作单位的要点。
为什么你需要工作单位在项目的主要原因是,你需要确保所有的仓库都相同的情况下。像在实体框架的DbContext和DbSet之间的关系,工作单位和仓库之间的关系。
如果你想实现你的UnitOfWork您可以参考以下链接:https://codereview.stackexchange.com/questions/47879/unit-of-work-and-repository-with-entity-framework-6
这真的是越来越回答您的问题的意见关于EF做的工作 如果你看一下EFCore如何做到这一点,你实际上定义上下文,并定义你想要的上下文中哪些类。从https://docs.microsoft.com/en-us/ef/core/它们定义了从的DbContext继承BloggingContext。下面的例子是从Microsoft:
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=localdb)\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;");
}
}
他们有一个博客类,并在这个例子时得到迁移和更新的数据库(https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/)上运行创建成桌的Post类。现在你有博客和帖子中定义的BloggingContext里面,你可以创建一个实例(好,如果你喜欢https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext在这里使用依赖注入,你可以阅读更多有关)的BloggingContext和使用LINQ到你的心内容,无需自定义库或工作单位。 EF确实,一旦你已经确定你在什么情况下要什么类的工作。随着中说,我们确实使用工作的资源库和单位,我的工作,如果有一个理由使用极大的模式,但过去那种或学习为自己,EF确实非常好。