Какова актуальность шаблона репозитория Generi c в. Net Core с Entity Framework - PullRequest
3 голосов
/ 06 марта 2020

Я пытаюсь (и не могу) понять назначение шаблона репозитория Generi c в конкретном c экземпляре, где он обернут вокруг 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();
}

Я думаю, мой настоящий вопрос почему мы обертываем репозиторий generic c вокруг того, что по сути уже является репозиторием generic c (с большим количеством функций и оптимизаций)?

1 Ответ

0 голосов
/ 09 марта 2020

Не будучи слишком самонадеянным, я хотел бы ответить на свой собственный вопрос, основанный на ветке комментариев.

Общий шаблон репозитория c является пережитком со времен, предшествовавших эре Object- Реляционные картографы (ORM), такие как Entity Framework, xHibernate, Dapper, PetaPoco и миллионы других.

С появлением ORM все функции, обнаруженные в шаблоне репозитория, инкапсулированы в самом ORM.

Например, Entity Framework по умолчанию использует Transaction / UnitOfWork каждый раз, когда вы вызываете .SaveChanges() для DbContext.

Он также автоматически отслеживает изменения, внесенные в сущности, возвращенные запросом, если вы не явно скажите это не с UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking).

Что касается Generi c Репозитории, как вы думаете, следующий код:

MyDbContext.Set<WeatherForecast>().Add(forecast);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...