آموزش Sequence در EF Core

در بسیاری از پروژه‌های نرم‌افزاری، توسعه‌دهندگان به مقادیر عددی یکتا و افزایشی نیاز دارند؛ مثلاً برای شماره‌گذاری سفارش‌ها، فاکتورها یا تیکت‌های پشتیبانی. در EF Core، Sequence ابزار قدرتمندی را فراهم می‌کند که این مقادیر را به‌صورت کنترل‌شده تولید کند. Sequence به‌عنوان یک شیء مستقل در پایگاه‌داده عمل می‌کند و می‌تواند بین چندین جدول مختلف به اشتراک گذاشته شود. در این آموزش با نحوه تعریف و استفاده از Sequence در EF Core آشنا می‌شویم و کاربردهای رایج آن را بررسی می‌کنیم. با ما همراه باشید با آموزش Sequence در EF Core و Asp.Net Core

Sequence در EF Core چیست و چه کاربردی دارد؟

در توسعه نرم‌افزارهای حرفه‌ای، گاهی نیاز است مقدار عددی یکتایی به‌صورت افزایشی تولید شود که تحت کنترل توسعه‌دهنده باشد. در چنین مواردی، استفاده از Sequence در EF Core بهترین گزینه است. Sequence یک شیء در پایگاه‌داده است که وظیفه تولید اعداد افزایشی منحصر‌به‌فرد را بر عهده دارد. برخلاف Identity که فقط به یک ستون از یک جدول خاص وابسته است، Sequence یک عنصر مستقل از جدول بوده و می‌تواند توسط چندین جدول مختلف به اشتراک گذاشته شود.

مزایای استفاده از Sequence در EF Core

  • مکان تولید مقدار پیش‌فرض برای چند جدول
  • کنترل دقیق بر شروع، حداقل، حداکثر و مقدار افزایش
  • مناسب برای تولید شماره سفارش، شماره فاکتور، شماره پیگیری و…
  • امکان استفاده دستی در کد برای پیش‌تخصیص مقدار (Preallocation)

کاربردهای رایج Sequence در EF Core

  • تولید شماره فاکتور در سیستم‌های فروش و خرید
  • تخصیص شماره پیگیری در سیستم‌های پشتیبانی
  • ایجاد شماره شناسایی کاربران (User Code)
  • تولید شماره سریال برای محصولات
  • نوبت‌دهی یا صف در سیستم‌های رزرو
  • استفاده در فرم‌های قبل از ذخیره‌سازی (Preallocate)

متدها و تنظیمات Sequence در EF Core

modelBuilder.HasSequence<int>("OrderNumbers", schema: "shared")
.StartsAt(1000)
.IncrementsBy(1)
.HasMin(1000)
.HasMax(99999)
.IsCyclic(false);
  • متد StartsAt(value) : مقدار ابتدایی که Sequence از آن شروع می‌شود.
  • متد IncrementsBy(value) : مشخص می‌کند Sequence با چه فاصله‌ای افزایش یابد.
  • متد HasMin(value) : حداقل مقداری که Sequence می‌تواند به آن برسد. معمولاً زمانی کاربرد دارد که IsCyclic(true) استفاده شود.
  • متد HasMax(value) : حداکثر مقداری که Sequence می‌تواند به آن برسد. اگر تنظیم نشود. حداکثر مقدار نوع داده استفاده می‌شود. (مثلاً int.MaxValue)
  • متد IsCyclic(true | false) : مشخص می‌کند آیا Sequence پس از رسیدن به حداکثر، دوباره از مقدار حداقل شروع کند یا خیر. پیش‌فرض: false
  • اتربیوت schema : مشخص می‌کند Sequence در کدام schema دیتابیس قرار گیرد. اگر تنظیم نشود، در schema پیش‌فرض قرار می‌گیرد.

استفاده از Sequence به‌عنوان مقدار پیش‌فرض

modelBuilder.Entity<Order>() .Property(o => o.OrderNo) .HasDefaultValueSql("NEXT VALUE FOR shared.OrderNumbers");

گرفتن مقدار دستی Sequence در کد

این روش زمانی کاربرد دارد، که بخواهید قبل از درج داده، مقدار Sequence را دریافت کنید.

var NextValue = _context.Database
.SqlQuery<long>($"SELECT NEXT VALUE FOR Shared.OrderSeq")
.AsEnumerable()
.First();

تفاوت StartsAt و HasMin

StartsAt فقط اولین مقدار تولیدی Sequence را تعیین می‌کند. اما HasMin یک محدودیت منطقی در پایگاه‌داده است که اجازه نمی‌دهد مقدار Sequence کمتر از آن شود (در مواقعی مثل وقتی Sequence cyclic باشد یا دستی مقداردهی شود).

  • برای شروع اولیه از StartsAt استفاده میشود.
  • برای محدودیت پایین‌دستی از HasMin استفاده میشود.

در اکثر موارد StartsAt کافی است، اما برای Sequenceهایی که Cyclic هستند یا امنیت داده برای دامنه مشخص مهم است، بهتر است HasMin هم استفاده شود

آیا لزومی داره از یک Sequence در چند جدول استفاده کنیم؟

فرض کن چند نوع موجودیت در سیستم وجود داره مثل: فاکتور خرید، فاکتور فروش، فاکتور برگشت، حالا اگر بخوای شماره فاکتور سراسری و یکتا باشه (مثلاً INV-1001, INV-1002, …) و در هیچ‌کدوم تکرار نشه، باید همه از یک Sequence مشترک استفاده کنن.

مشاهده در آپارات یا یوتیوب

محتوای ویدیویی این صفحه در سایت قابل مشاهده است. اما اگر عادت دارید توی پلتفرم آپارات یا یوتیوب ویدیوها را مشاهده کنید، می‌توانید از دکمه‌های زیر استفاده کنید.

تماشای ویدیوی آموزش Sequence در EF Core در آپارات و یوتیوب

اشتراک‌گذاری با یک کلیک

با یک کلیک، محتوای این صفحه را در شبکه‌های اجتماعی، ایمیل یا پیام‌رسان‌های مورد علاقه‌تان به‌سرعت به اشتراک بگذارید.

اشتراک‌گذاری صفحه آموزش Sequence در EF Core در شبکه‌های اجتماعی

نظرات شما برای ما ارزشمند است

متاسفانه تاکنون پیامی برای این مطلب ثبت نشده است. شما اولین شخصی باشید که پیام می‌گذارد.

نظرات کاربران

فرم افزودن دیدگاه

با ارسال نظرات خود ما را در ایجاد محتوای بهتر کمک کنید.

با خدمات تهران آی تی آشنا شوید

تهران آی تی با افتخار خدمات زیر را ارائه می‌دهد.