gpt4 book ai didi

c# - .Net Core 中的通用存储库模式与 Entity Framework 的相关性是什么

转载 作者:行者123 更新时间:2023-12-04 04:16:56 26 4
gpt4 key购买 nike

我正在尝试(但失败)了解通用存储库模式在它围绕 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 本身中。

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

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

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

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

关于c# - .Net Core 中的通用存储库模式与 Entity Framework 的相关性是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60564972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com