DotNetZoom
3.13K subscribers
342 photos
18 videos
36 files
606 links
DotNetZoom
💎 Everything about .NET

ارتباط با مدیر و تبلیغات آگهی استخدام:
@mjebrahimi

لینک گروه ASPNET Core:
https://t.me/+ufG25x7lVFgyYTNk
Download Telegram
❇️ #ویدئو آموزش معماری Microservice در ASP.NET Core (زبان اصلی زیر نویس دار)

از پایین ویدئو گزینه [Subtitle/captions] میتوانید زیرنویس آن را فعال کنید

[01:06] - Introducing the .NET application architecture website
[05:23] - Running the reference application
[06:33] - Understanding the target audience
[07:35] - Testing strategy
[09:11] - Exploring the technology stack
[13:25] - Managing the weight of the API gateway
[16:35] - Adopting the guidance
[21:33] - Communication patterns between microservices
[22:36] - Modeling challenges with microservices
[26:14] - Getting help with the reference application

Useful Links
GitHub repository for eShopOnContainers
.NET Microservices - Architecture e-book
.NET Application Architecture Guidance
____________
@DotNetZoom

======================

Implement microservices patterns with .NET Core and Docker containers
https://channel9.msdn.com/events/Ignite/Microsoft-Ignite-Orlando-2017/BRK3317
قابلیت Decompile کد های #C در Visual Studio

قبلا در مورد اضافه شدن قابلیت Decompile کد های سی شارپ در VSCode توسط ILSpy گفته بودیم

این قابلیت برای Visual Studio هم وجود داره اما در حالت پیش نمایش هست و به صورت پیشفرض فعال نیست

جهت فعال سازی این قابلیت باید از منو Tools گزینه Options را انتخاب کرده و از قسمت Text Editor > C# > Advanced گزینه Enable navigation to decompiled sources رو تیک بزنین

بعد از فعال سازی روی کلاس/متدی که سورسش رو ندارین راست کلید و گزینه "Go to Definition" رو انتخاب کنین براتون Decompile کنه و کدشو نشونتون بده

این امکان هم توسط کتابخانه معروف ILSpy انجام شده و بار اولی که ازش استفاده کنین یه سوال (در مورد قبول License کتابخونه ILSpy) میپرسه که گزینه Yes رو باید بزنین

جهت استفاده از این قابلیت باید حداقل ویژوال استادیو 2019 نسخه 16.5 به بالا نصب داشته باشین (از منوی Help گزینه Check for Update میتونین چک کنین)
جهت مطالعه بیشتر اینجا و اینجا
______________
@DotNetZoom
پروژه سورس باز فروش بیمه به صورت Microservices در NET Core.

🔰 تکنولوژی های استفاده شده
.NET Core 2.1
Entity Framework Core
#MediatR
#Marten
#Eureka
#Ocelot
#JWT Tokens
#RestEase
#RawRabbit
#NHibernate
#Polly
#NEST (#ElasticSearch client)
#Dapper
#SignalR
#MicroServices
DynamicExpresso

https://github.com/asc-lab/dotnetcore-microservices-poc

___________
@DotNetZoom
برترین Shortcut های Visual Studio 2019

اگه میخواین از ویژوال استادیو به صورت حرفه ای استفاده کنین و البته بازدهی تون رو خیلی بیشتر کنین، باید میانبر های ویژوال استادیو رو بلد باشین. اینطوری کد نویسی خیلی شیرین تر میشه.

🔰در اینجا سعی کردم بهترین و کاربردی ترین میانبر ها رو لیست کنم:

🔸Code Formatting : Ctrl+K+D
کد شما رو تر و تمیز یا به به قولی صاف و صوف میکنه

🔹Suggested Code Refactoring : Ctrl+. or Alt+Enter
پیشنهاد هایی برای ریفکتور کردن کدی که cursor موس روش هست بهتون میده (در واقع light bulb ویژوال استادیو رو باز میکنه)

🔸Go to Definition : F12
شما رو به جایی که کلاس/اینترفیس/متد مربوطه تعریف شده ارجاع میده

🔹Go to Implementations : Shift+F12
شما رو به جایی که کلاس/اینترفیس/متد پیاده سازی شده ارجاع میده (روی اینترفیس تست اش کنین) + نمایش لیست رفرنس ها

🔸Go to Line : Ctrl+G
شماره خط کد رو از شما میگیره و شما رو به کد مربوطه ارجاع میده

🔹Find : Ctrl+F
پنجره جستجو رو براتون باز میکنه

🔸Find in files (Advance) : Ctrl+Shift+F
پنجره جستجوی پیشرفته رو براتون باز میکنه

🔹Go to All search : Ctrl+T or Ctrl+,
بنجره جستجو در همه جا (کد ها، نام فایل ها، و...) رو براتون باز میکنه.

🔸Quick Search : Ctrl+Alt+Q
یه چیزی مشابه قبلی با این تفاوت که توی ابزار و امکانات ویژوال استادیو هم سرچ میکنه (میشه انتخاب کرد فقط تو کد ها و فایل ها سرچ کنه)

🔹Show Current File in Solution Explorer : Ctrl+[+S
فایل جاری رو توی Solution Explorer به صورت انتخاب شده نشونش میده

🔸Go to Matching Brace : Ctrl+]
شما رو به براکت شروع و پایان کد مربوطه (متد/شرط/حله و...) ارجاع میده

🔹Comment Selected Code : Ctrl+K+C
کد انتخاب شده یا خطی که cursor موس روش هست رو کامنت میکنه

🔸Uncomment Selected Code : Ctrl+K+U
کد انتخاب شده یا خطی که cursor موس روش هست رو از کامنت خارج میکنه

🔹Show Autocomlete : Ctrl+Space
بسته به اینکه cursor موس تون روی چه کدی هست منوی Autocomplete مربوطه رو باز میکنه

🔸Show Overloads : Ctrl+Shift+Space
وقتی cursor موس روی یک متد هست، لیست overload های دیگه شو نشون میده

🔹Collaps methods : Ctrl+M+O
متد های فایل جاری رو collapse میکنه (میبنده) مناسب واسه وقتی که کلاس شلوغی دارین

🔸Expand methods : Ctrl+M+P
متد های فایل جاری رو از collapse در بر میگردونه به حالت عادی (باز میکنه)

🔹Ctrl+Enter
یک خط جدید (new line) بالای جایی که cursor موس قرار داره ایجاد میکنه

🔸Ctrl+Shift+Enter
یک خط جدید (new line) پایین جایی که cursor موس قرار داره ایجاد میکنه

🔹Rename Property : Ctrl+R+R
نام یک پروپرتی، متد، کلاس و... رو در همه جای پروژه تغییر میده

🔸View Clipboard history : Ctrl+Shift+V
لیست تاریخچه کلیپ بورد شما رو نشون میده و میتونین ازش انتخاب کنین
___________________
@DotNetZoom
✳️میان‌افزاری برای ثبت آمار بازدیدکنندگان برنامه‌های ASP.NET Core

مقاله زیر نمونه پیادی سازی یک middleware برای asp core رو نشون میده که کارش ثبت آمار بازدید کنندگان سایت هست. اینکه چه کسانی با چه ip هایی و از چه کشور هایی در چه زمان هایی کدام صفحات رو بازدید کردند.
کانفیگ و استفاده ازش بسیار راحته و آموزشش در لینک زیر هست

https://matteofabbri.org/read/server-side-analytics

🔸نکات جالبی که این کتابخونه داره اینه که:
۱- برای ذخیره سازی اطلاعات میتونین از store های موجود از جمله MongoDb, SqlServer, SqLite استفاده کنین
۲- یا اینکه store سفارشی خودتون رو بنویسین و مثلا اطلاعات رو توی یه دیتابیس دیگه مثل MySql ذخیره کنین
۳- میتونین مسیر ها یا پسوند هایی رو مشخص کنین که اطلاعات اونا رو اصلا ثبت نکنه. مثلا مسیر /js یا پسوند های .js, .css, .jpg
۴- میتونین تنظیم کنین تا فقط درخواست های یک مسیر مشخص رو ثبت کنه و نه تمام درخواست های سایت
۵- نام جداول لازم برای ذخیره آمار بازدید کنندگان رو تغییر بدین
۶- توسط یک دیتابیس لوکال، نام کشور ها رو از روی ip تشخیص میده
۷- اگه بر اساس range ip نتونست نام کشور رو پیدا کنه، از api های دیگری جهت تشخص نام کشور استفاده میکنه که دیتای معتبر تری میدن.

مخزن گیتهاب :
https://github.com/matteofabbri/ServerSideAnalytics
دمو گزارش آمار بازدیدکنندگان :
https://matteofabbri.org/stat
اطلاعات بیشتر:
https://www.codeproject.com/Articles/1251484/Introducing-Server-Side-Analytics-for-ASP-NET-Core
پیشنهاد میکنم سورس کدش رو بررسی کنین، ایده های جالبی بهتون میده

_______________
@DotNetZoom
منتشر شد ASP.NET Core .NET 5 Preview 8

https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-5-preview-8/

🔰 مهمترین تغییرات

1- پشتیبانی Model Binding و Validation برای نوع های record (جدید - معرفی شده در C# 9)

2- قابلیت Auto Refresh به هنگام استفاده از dotnet watch (این مورد هنوز توسط VS پشتیبانی نمیشه و فقط توسط CLI امکان پذیره)

3- امکان نمایش log های Console در قالب JSON (نمونه کد)

4- قابلیت CSS isolation برای کامپوننت های Blazor

5- امکان Lazy loading (لود با تاخیر) اسمبلی های Blazor جهت افزایش پرفرمنس (نمونه کد)


منتشر شد EF Core 5.0 Preview 8

https://devblogs.microsoft.com/dotnet/announcing-entity-framework-core-ef-core-5-0-preview-8/

🔰 مهمترین تغییرات

1- پشتیبانی از ارث بری TPT

2- پشتیبانی از Table-valued Functions در SQL (فراخوانی function هایی که میتونن خروجی table داشته باشن)

3- بهبود مایگریشن در SQLite

4- امکان تنظیم قابلیت Split queries (جهت افزایش پرفرمنس هنگام Join و Include های زیاد) به صورت سراسری


منتشر شد NET 5.0 Preview 8.

https://devblogs.microsoft.com/dotnet/announcing-net-5-0-preview-8/

🔰 مهمترین تغییرات

1- پشتیبانی از قابلیت های جدید C# 9 (از جمله Top-level programs و Pattern matching و Target-typed new expressions)

2- اصلاح بیش از 80% از API های دات نت جهت پشتیبانی از Nullable Annotations (که به قابلیت nullable reference type موجود در C# 8 کمک میکنه)

3- بهبود های زیرساختی و پرفرمنسی (از جمله Regular Expression)

4- پشتیبانی از ClickOnce Publish (البته هنوز دارن روش کار میکننن و ممکنه تا ورژن RC2 تکمیل بشه)


🔰 پ.ن:

🔸 تیم EF Core توی آپدیت های اخیر خیلی عالی عمل کرده و خروجی ملموس تری نسبت به تیم های NET. و ASP Core داشته. توی این ریلیز های اخیر هربار کلی قابلیت مفید و کاربردی رو اضافه کرده که EF Core رو پخته تر از همیشه کرده.😎👌(لیست این تغییرات رو اینجا میتونین ببینین)

🔹 تا انتشار کامل NET 5. فقط 3تا ورژن دیگه مونده. 2تا RC و یک RTM (همون نسخه نهایی) 😍✌️
___________________
@DotNetZoom
استفاده از پروکسی داخل پروژه های دات نت Framework Full
https://goo.gl/4JbeYW

خب وقتی پروکسی سرور خودتون رو راه انداختین باید کاری کنین که تمام درخواست های وبسایت شما (مثلا درخواست ارسال نوتیفیکشن تلگرام) از طریق پروکسی سرور شما ارسال بشه نه توسط خود وبسایتتون (یعنی Default Proxy پروژه تون رو عوض کنین)

تو NetFramework Full به صورت زیر عمل میکردیم
WebRequest.DefaultWebProxy = new WebProxy("http://127.0.0.1:9050", BypassOnLocal: true) { UseDefaultCredentials = true };

- فیلد BypassOnLocal مشخص میکنه که درخواست های local (محلی) از طریق پروکسی عبور نکنه و مستقیما ارسال بشه.

- توسط خاصیت BypassList و BypassArrayList میشه لیستی از ادرس هایی رو مشخص کرد که برای درخواست اونها اون ها پروکسی استفاده نشه.

- خاصیت UseDefaultCredentials مشخص میکنه که از Credentials پیشفرض استفاده کنه که در حالت عادی یعنی Username و Password جهت احراز هویت پروکسی سرور ارسال نمیشه.

- اگه پروکسی سروو شما دارای Username و Password باشه باید اون رو داخل خاصیت Credentials شی WebProxy ست کنین.

WebRequest.DefaultWebProxy = new WebProxy("http://127.0.0.1:9050", BypassOnLocal: true) { Credentials = new NetworkCredential("username", "password") };

ست کردن مقدار WebRequest.DefaultWebProxy باعث میشه پروکسی پیشفرض پروژه تغییر کنه و از این به بعد تمام درخواست ها (به جز Local به دلیل Bypass در این مثال) از طریق پروکسی ارسال و دریافت بشه.

همچنین مشابه تنظیمات بالا رو میتونین از طریق WebConfig به صورت زیر انجام بدین
<configuration>
<system.net>
<defaultProxy>
<proxy proxyaddress="http://127.0.0.1:9050" bypassonlocal="true" usesystemdefault="true"/>
</defaultProxy>
</system.net>
</configuration>

اما این روش (DefaultProxy) باعث میشه درخواست های کل سیستم از طریق پروکسی ارسال و دریافت بشه
درصورتی که نیاز دارین فقط برای یک درخواست خاص (مثل ارسال نوتیفیکیشن توسط api تلگرام) از پروکسی استفاده کنین و نه تمام درخواست ها
باید به صورت زیر عمل کنین
WebProxy proxy = new WebProxy("http://127.0.0.1:9050",true);
WebRequest request = WebRequest.Create("http://www.contoso.com");
request.Proxy = proxy;


_______________
@DotNetZoom
مقایسه تکنولوژی استفاده شده در شرکت های بزرگ برنامه نویسی دنیا

توسط این سایت می توانید بهترین تکنولوژی، ابزار ها و فریمورک های مورد استفاده در شرکت های بزرگ برنامه نویسی دنیا را مشاهده و با یکدیگر مقایسه کنید.
https://stackshare.io/

مثلا لینک زیر تکنولوژی ها و ابزاری های مورد استفاده در شرکت Airbnb را نمایش می دهد.
https://stackshare.io/airbnb/airbnb
___________
@DotNetZoom
مقایسه بهترین کتابخانه های دات نت
https://dotnet.libhunt.com
توسط این سایت میتونین کتابخانه های دات نت رو با هم مقایسه کنین و بفهمین کدوم محبوب تره، همچنین میتونین لیستی از کتابخانه های مشابه رو هم برای هر کدوم پیدا کنید.

این سایت از پارامتر های مختلفی برای مقایسه و امتیازدهی کتابخانه ها استفاده میکنه. از جمله:
- Star, Fork, Watcher گیتهاب
- میزان فعال بودن بر اساس آخریت کامیت
- تعداد دانلود در ماه
- میزان کیفیت کد و ...
- میزان سرچ اش رو هم براسا امار Google Trend نشون میده

مثلا لینک زیر IOC Container های معروف Autofac و Ninject را با هم مقایسه میکنه.
https://dotnet.libhunt.com/compare-autofac-vs-ninject?rel=cmp-lib

🔸 توسط این سایت و سایت قبلی که معرفی کردیم میتونین بدون شک "محبوب ترین" کتابخانه و ابزار ها رو برای کاراتون پیدا کنین.

___
@DotNetZoom
❇️ کتاب رایگان ماکروسافت برای آموزش #Microservices در NET Core.

💎بدون شک این کتاب یکی از بهترین و کامل ترین منابع جهت یادگیری توسعه برنامه‌های مبتنی بر معماری Microservices و مدیریت آنها با استفاده از Docker Containers در NET Core. است.

https://docs.microsoft.com/en-us/dotnet/architecture/microservices/
لینک دانلود PDF کتاب
https://aka.ms/microservicesebook

🔸برای یادگیری بهتر می‌توانید پروژه eShopOnContainers که بر اساس مفاهیم این آموزش نوشته شده است را بررسی کنید.

https://github.com/dotnet-architecture/eShopOnContainers
___________________
@DotNetZoom
سریع ترین Object Mapper دات نت

کتابخانه Mapster مشابه AutoMapper است ولی با پرفرمنس باورنکردنی و فوق سریع
این کتابخانه حتی از حالت دستی هم سریع تر است!
https://github.com/MapsterMapper/Mapster

طبق بنچمارک زیر متونین پرفرمنس این روش ها رو مقایسه کنین.
https://github.com/mjebrahimi/Benchmark.netCoreMappers
_______________
@DotNetZoom
❇️ بازنویسی یک برنامه‌ی قدیمی Web Form با DDD، TDD و NET Core

پیشنهاد میکنم این مقاله طولانی رو بخونین، موارد خیلی زیادی رو به صورت عملی یاد میگیرین
فقط کافیه لیست تکنولوژی ها و معماری های استفاده شده رو ببینین تا به پر مایه بودنش پی ببرین

- #DDD & #CQRS
- Using CoreDdd (a library to work with DDD and CQRS.)
- #TDD & #Unit_Testing
- Using #NUnit (a unit test framework)
- Using #Shouldly (an assertion framework for NUnit)
- Using #Nhibernate ORM & CoreDdd.Nhibernate (for persistence layer)
- Using #FluentNHibernate (for database mappings)
- #Mocking & #Fake Services
- Using #FakeItEasy (an easy mocking framework)
- Adding ASP NET Core & built-in IOC Container
- #Command_Handler Pattern
- #Domain_Events Handler Pattern
- Domain Events Message Handler Pattern
- Adding #Message_Bus
- Using #Rebus & Rebus.Async (a message bus library)
- Using Await/Async for Performance Boost

🔸لینک مقاله :
https://bit.ly/2UpoW5F
🔹ریپازیتوری پروژه :
https://github.com/xhafan/legacy-to-coreddd
____
@DotNetZoom
#یک_نکته

ترجیحا متد های async را به روش sync و توسط Task.Wait و Task.Result فراخوانی نکنید زیرا باید block شدن ترد جاری شده و حتی میتواند باعث dead-lock شود.

ولی اگر جایی مجبور شدید به این صورت استفاده کنید (مثلا در سازنده کلاس زیرا نمی توان async/await استفاده کرد) به جای
task.Wait();
var result = task.Result;
حتما حتما از روش زیر استفاده کنید
var result = task.GetAwaiter().GetResult();

این روش دقیقا مانند روش اول است حتی بحث dead-lock و blocking ترد هم صادق است ولی ...
در روش اول اگر خطایی رخ دهد استثنای صادر شده را در یک AggregateException محصور شده پرتاب میکند که بررسی Detail آن سخت تر و نامفهوم تر است ولی در روش دوم اگر خطایی رخ دهد یک Exception معمولی پرتاب میشود

منابع :
https://codurance.com/2018/12/06/wait-and-getawaiter/
https://stackoverflow.com/questions/17284517
_______________
@DotNetZoom
Forwarded from کدهک
آشنایی با Git در Visual Studio

در این مجموعه ویدیو ها به معرفی ابزار و قابلیت های Git در Visual Studio می پردازیم و نحوه استفاده از آن را در ASP NET Core بررسی می کنیم.

https://codehaks.com/go/pra
❇️ مجموعه آموزش های Microservices در NET Core.

اگر در اینترنت به دنبال آموزش های Microservices گشته باشین متوجه میشین که اکثر مقالات یا به صورت کلی و عمومی هستند (نه مختص دات نت) و یا برای زبان های دیگه اند و در نهایت اونایی هم مختص دات نت باشن به صورت پراکنده در فضای اینترنت پخش شده اند

علاوه بر این، مبحث Microservices دارای موضوعات متعدد و بزرگی هست و نمیشه اون رو با یک یا چند مقاله جسته و گریخته یاد گرفت واسه همین به یک سری آموزش نیاز دارید.
همچنین بعد از یادگیری مفاهیم پایه این مبحث، بهترین چیزی که میتونه شما رو بر روی این موضوع مسلط کنه، بررسی سورس نمونه پروژه های واقعی که بر پایه Microservices و NET Core. نوشته شده اند هست

🔰ریپازیتوری زیر سعی کرده بهترین آموزش های Microservices که مختص NET Core. هستند رو گردآوری کنه و در پایان لیستی از پروژه های سورس باز گیتهاب که با این معماری نوشته شده اند رو جمع آوری کنه

اگر علاقمند به یادگیری Microservices در NET Core. هستید این بهترین منبع رایگانی هست که میتونه به شما کمک کنه

https://github.com/mjebrahimi/Awesome-Microservices-NetCore
__________
@DotNetZoom
رمزنگاری خودکار فیلدها در EF Core
بعلاوه بررسی قابلیت HasConversion و ValueConverter در EF Core

🔸مقاله زیر قابلیت جالبی (و البته خاصی) رو به نام ValueConverter ها در EF Core 2.1 (به بالا) معرفی میکنه، توسط این قابلیت دیتا های شما قبل از اینکه وارد دیتابیس بشه (مثلا Add و Update و...) این امکان رو به شما میده که تغییرش بدین؛ مثلا مقادیر enum تون رو به جای اینکه عددش توی دیتابیس ذخیره بشه، متن string اش ذخیره بشه.
این کار پشت صحنه و به صورت خودکار انجام میشه و نیازی نیست توی کد هاتون خودتون هندل اش کنین.

🔹همچنین موقع واکشی کردن اطلاعات، قبل از اینکه دیتا به دست شما برسه این امکان رو به شما میده که تغییرش بدین، مثلا همون متن string رو به enum مربوطه تبدیل کنین. این کار هم به صورت خودکار انجام میشه و نیازی نیست توی کوئری هاتون کد اضافه تری بنویسین.

🔸حالا وحید نصیری عزیز با استفاده از این ترفند اومده یه مثال زده. اومده یه ValueConverter نوشته که کارش Encrypt کردن متون قبل از Insert شدن و Decrypt کردن اون به هنگام واکشی هست. در نتیجه متون شما توی دیتابیس رمزنگاری شده ذخیره میشه، ولی وقتی توی برنامه کوئری میزنین، متن عادی (رمزگشایی شده) رو مشاهده میکنین.

🔹البته این صرفا یک مثال (خلاقانه) هست و به نظرم راه بهینه ای واسه رمزنگاری اطلاعات دیتابیس نباشه، توی SQLServer راه های اصولی تری مخصوص این قضیه وجود داره

https://www.dotnettips.info/post/3015
___________________
@DotNetZoom
🔰 نمونه مثالی از ASP.NET Core و Entity Framework Core به همراه معماری DDD و CQRS و Event Sourcing

🔸تکنولوژی ها و کتابخانه های استفاده شده :
- ASP NET Core 2.2 (with .NET Core 2.2)
- ASP NET MVC Core
- ASP NET WebApi Core
- ASP NET #Identity Core
- Entity Framework Core 2.2
- .NET Core Native DI
- #AutoMapper
- #FluentValidator
- #MediatR
- #Swagger UI
🔹معماری و پترن های استفاده شده :
- Full architecture with responsibility separation concerns, #SOLID and #Clean_Code
- #DDD : Domain Driven Design (Layers and Domain Model Pattern)
- #Domain_Events
- #Domain_Notification
- #CQRS (Imediate Consistency)
- #Event_Sourcing
- #UnitofWork
- #Repository and Generic Repository

🔰ریپازیتوری پروژه :
https://github.com/EduardoPires/EquinoxProject
_______________
@DotNetZoom
Forwarded from کدهک
آشنایی با xUnit و نحوه پیاده سازی تست واحد در دات نت

https://tinyurl.com/cdhks-xunt
🔰 #آیا_میدانستید
توی کنسول مروگر میتونین با دستور console.table، آرایه ها و لیست ها تون رو به صورت جدولی نشون بدین؟

var exampleArray = [
"First item in the array",
"I'm the second item in this array",
"Obviously i'm the last item"
];
console.table(exampleArray);

مثال های بیشتر:
https://www.telerik.com/blogs/better-visualization-of-console-data-with-tables
__________
@DotNetZoom
معرفی کتابخانه EFCore.BulkExtensions
در سری
#معرفی_اکستنشن_های_کاربردی_EFCore
Entity Framework Core Bulk Batch Extensions for Insert Update Delete and Read (CRUD) operations on SQL Server

خیلی وقتا نیاز میشه یک مرتبه حجم زیادی از رکورد ها رو توسط EFCore ذخیره کنین (مثلا import کردن از یه فایل excel)
در حالت عادی (متد Add و یا AddRange)، رکورد های شما به صورت تکی Insert میشه و سرعت بالایی نداره، بر خلافش اما، در روش Bulk Insert، همه رکورد ها به صورت یکجا Insert میشن و سرعت بسیار بسیار بالایی داره این روش (حتی تا 20 برابر سریع تر!)

این کتابخونه بی نظیر، قابلیت انجام عملیات Bulk و Batch رو در EF Core فراهم میکنه و از async هم پیشتیبانی میکنه :
- Bulk operations (Insert, Update, Delete, Read, Upsert, Sync)
- Batch operations (Delete, Update)

* برای مقایسه پرفرمنس و تفاوت سرعت بین روش عادی و Bulk هم تصویر پست گویای همه چی هست

لینک ریپازیتوری + مثال و توضیحات :
https://github.com/borisdj/EFCore.BulkExtensions

#Bulk #EFCore #Performance
___________________
@DotNetZoom