Comments 11
С нетерпением ждём сравнение производительности MongoDB 3.4 и PosgreSQL 9.6!
Небольшое замечание: в реализации методов репозитория можно напрямую возвращать Task или Task без async/await. Если же async/await необходим, рекомендуется await SomeJob().ConfigureAwait(false); — просто хорошая практика, почитайте в гугл.
Разобрались бы сначала где и для чего это используется, чем вот так вот советовать, ссылаясь на Google
Утыкивая свой код .ConfigureAwait(false); вы делаете его длинным и некрасивым ради того, чтобы кто-то мог использовать порочные практики вызывая .Wait в асинхронном коде. К сожалению это повсевместно рекомендуемое решение…
Подробнее по ссылке: https://blog.stephencleary.com/2012/07/dont-block-on-async-code.html
blog.stephencleary.com/2012/07/dont-block-on-async-code
Обычный код засорять такими вещами совершенно не нужно и если у вас есть товарищи, которые используют порочные практики — заворачивайте их на ревью.
Вообще-то в статье речь про ASP.NET Core. Где SynchronizationContext отсутствует в принципе. Поэтому ConfigureAwait(false) имеет смысл только из соображений обратной совместимости с classic ASP.NET и проч.
P.S. Подкрепить свои слова ссылкой — и куда более весомо, и куда вежливей, чем посылание в гугл.
1) services.Configure(options =>
Зачем выковыривать каждую настройку, если сделали удобный маппинг всего объекта на JSON?
2) Для connectionString достаточно одной строки и
new MongoUrl(«mongodb://localhost:27017/test») спокойно вам отдаст и connectionString и DatabaseName
3) services.AddTransient<INoteRepository, NoteRepository>()
MongoClient — это SMART клиент, который нужен всего один на приложение. (исключения составляют особые случаи). MongoClient сам заботится о переподключении, о connection pool и.т.п, поэтому регайте NoteContext как Singleton.
4) Builders.Filter.Eq(«Id», id) превращается в обычную лямбду (x => x.Id == id). Драйвер нормально типизирован и вполне современный
services.AddTransient<INoteRepository, NoteRepository>();
Я бы все-таки сделал Scoped, если храните какой-то кеш на запрос, либо, как отметил ZOXEXIVO, Singleton. Раньше по-крайней мере клиент к монге именно так работал и не было смысла создавать несколько инстанцев коннекта, в последних версиях может что-то и поменялось, не смотрел...
По поводу async-методов, не стоит реализовывать в репозитории только такие методы, они парами должны быть доступны (UpdateNote и UpdateNoteAsync), дело в том, что механизм выполнения асинхронных методов сложен и требует больших затрат в приложении, а, к примеру, достать запись по Id, выполнится быстрее, чем само создание объекта Task (условно). И помните, что таким образом Вы раздуваете конечный автомат (см. ссылку)
Создание Web API приложения с использованием .NET Core + MongoDB .NET Driver