.Net Core 中的通用存储库模式与 Entity Framework 有何相关性

What is the relevance of the Generic Repository Pattern in .Net Core with Entity Framework

我正在尝试(但未能)理解通用存储库模式在围绕 Entity Framework 或 EF Core 的特定实例中的用途。

这样写有什么好处:

public void Update(T obj)
{
    DbContext.Set<T>().Attach(obj);
    DbContext.Entry(obj).State = EntityState.Modified;
    DbContext.SaveChanges();
}

当你通过简单地写成

来获得相同和更多
public void Update(Movie obj)
{
    DbContext.Set<Movie>().Attach(obj);
    DbContext.Entry(obj).State = EntityState.Modified;
    DbContext.SaveChanges();
}

public void Update(Movie obj)
{
    var movie = DbContext.Movies.FirsOrDefault(x => x.MovieId == obj.MovieId);
    DbContext.Entry(movie).CurrentValues.SetValues(obj);
    DbContext.SaveChanges();
}

我想我真正的问题是为什么我们要围绕基本上已经是通用存储库(具有更多功能和优化)的通用存储库包装一个通用存储库?

为了不冒昧,我想根据评论主题回答我自己的问题。

通用存储库模式是对象关系映射器 (ORM) 时代之前的遗留物,例如 Entity Framework、xHibernate、Dapper、PetaPoco 和其他一百万种。

随着 ORM 的出现,存储库模式中的所有功能都封装在 ORM 本身中。

例如,每次您在 DbContext 上调用 .SaveChanges() 时,Entity Framework 默认使用 Transaction/UnitOfWork。

它还会自动跟踪对查询返回的实体所做的更改,除非您明确告诉它不要使用 UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking)

就Generic Repositories而言,您认为以下代码是什么:

MyDbContext.Set<WeatherForecast>().Add(forecast);