من یک برنامه تحت وب دارم که با استفاده از دات نت 8 و ef توسعه داده شده.
یکی از دامین های برنامه، فاکتور خرید است که هر فاکتور باید شماره فاکتور یکسانی به فرمت " تاریخ روز/شروع از عددی ثابت (به عنوان مثال 14030813/100) " داشته باشد و فاکتورهای بعدی در همان روز در بخش دوم یک واحد افزایش پیدا میکنند (به عنوان مثال 14030813/101). همچنین من داخل متد SaveInvoiceAsync خودم متد GenerateInvoiceNumberAsync رو صدا میزنم که کارش اینه که اخرین فاکتور روز رو از دیتابیس فراخوانی کنه و در صورت وجود به بخش دوم آن یک واحد اضافه کنه.
حالا چالشی که من دارم اینه که اگر زمانی دوتا درخواست همزمان برای ثبت فاکتور ارسال بشه و race condition اتفاق بیوفته عملا دوتا شماره فاکتور یکسان برای فاکتور ایجاد میشه و این باعث خطا در سیستم میشه و من میخوام که این اتفاق نیوفته و در لایه اپلیکیشن این موضوع هندل بشه
با توجه به این که هیج update روی انتیتی های انجام نمیشه و صرفا insert انجام میشه optimistic concurrency هم کمکی نمیکنه بهم.
ممنون میشم از دوستان هرکس تجربه مشابه و راه حلی داره به اشتراک بذاره