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

  • کارگر جنوبی، بعد از جمهوری ساختمان ۲۰۷، طبقه۴، واحد۱۲

  • 021-66882200 0912-8099518

  • ۷ روز هفته ۹ صبح تا ۵ بعد از ظهر

آموزش Fluent API

آموزش Fluent API

Entity Framework Fluent API برای پیکربندی کلاس های Domain استفاده می شود که در این حالت convention های EF Core نادیده گرفته می شود.

Entity Framework Fluent API برای پیکربندی کلاس های Domain استفاده می شود که در این حالت convention های EF Core نادیده گرفته می شود.

برای تعریف Mapping با کمک Fluent API می توان به دو صورت عمل کرد:

  1. نوشتن دستورات در متد OnModelCreating
  2. ایجاد یک کلاس مجزا برای Map و اضافه نمودن آن به کلاس Context

در حالت اول متد OnModelCreating را که یک متد virtual هست، در کلاس Context باید Override کنیم.

کلاس Modlebuilder

Fluent API از کلاس Modelbuilder برای نگاشت Domain Classes به جداول پایگاه داده رابطه ای استفاده می کند. با استفاده از Fluent API شما می توانید پیکربندی Model خود را انجام دهید، حتی انجام بعضی از قابلیت هایی که با روش Data Annotation امکان پذیر نمی باشد. دسترسی به کلاس Modelbuilder با Override کردن متد OnModelCreating از کلاس DbContext صورت می گیرد. پس از آن ما با استفاده از ModelBuilder و Fluent API می توانیم مدل خود را پیکربندی کنیم.

متد OnModelCreating

این متد قبل از آماده سازی Model توسط DBContext صدا زده می شود. آماده سازی اولیه با ایجاد DBContext اتفاق نمی افتد. این اتفاق زمانی می افتد که Context برای اولین بار استفاده می شود. در طی آماده سازی، DBContext نمونه ای از ModelBuilder را ایجاد می کند.

کلاس ModelBuilder شامل Property ها و Method های مهمی برای پیکربندی Domain Model است. شما می توانید متد OnModelCreating را override کنید و از پارامتر modelBuilder برای پیکربندی مدل خود استفاده کنید. متدهای مختلفی در Fluent API، EF Core وجود دارد. این متدها بطور گسترده به سه دسته طبقه بندی می شوند:

(Model wide configuration database) یا پیکربندی گسترده مدل (بانک اطلاعاتی)

(Entity Configuration table) یا پیکربندی موجودیت (جدول)

Property configuration یا پیکربندی پراپرتی ها(ستون ها)

Model-wide configuration

Model wide properties برای پیکربندی کل Model اعمال می شود. به عنوان مثال، متد HasDefaultSchema شمایی را برای هر entity موجود در Model تعریف می کند.

Fluent API

Entity Configuration

پیکربندی موجودیت (جدول) با استفاده از متد Entity انجام می شود. در حقیقت این متد انتخاب کننده کلاسی هست که می خواهیم عملیات Mapping را برای آن انجام دهیم. کد زیر نمونه ای از نحوه پیکربندی کلید اصلی با استفاده از متد HasKey است.

Fluent API

متد Entity شیء EntityTypeBuilder را برای پیکربندی entityها در Model باز می گرداند. برخی از متدهای مهم موجود در شیء EntityTypeBuilder در زیر نشان داده شده است:

Fluent API

متد ToTable

با استفاده از این متد شما می توانید نامی متفاوت از نام Entity برای جدول انتخاب نمایید.

Fluent API

Property Configuration

این متد برای پیکربندی خصوصیات entity (ستون های جدول) انتخاب شده استفاده می شود. در حقیقت این متد Selector خصوصیت می باشد. متد Properties شیء PropertyBuilder را باز می گرداند، که مختص نوع پیکربندی شده است.

Fluent API

متد IsRequired

با استفاده از این متد شما می توانید پراپرتی موردنظر را required کرده و اجازه ندهید که مقدار null در ستون مربوط به این پراپرتی قرار گیرد.

Fluent API

متد IsConcurrencyToken

timestamp یک ویژگی است که هر بار که یک ردیفی در جدول Insert یا Update شود توسط پایگاه داده ایجاد می شود. با این ویژگی همچنین به عنوان concurrency token (نشانه همزمانی) رفتار می شود. این ویژگی این اطمینان را به شما می دهد، که دقیقا زمانی که شما رکوردی را برای به روزرسانی درخواست کردید، اگر شخص دیگری بخواهد همان رکورد را اصلاح کند خطایی صادر نماید.چگونگی دستیابی به این امر بستگی به provider پایگاه داده ای دارد که از آن استفاده می کنید. برای SQL Server ، timestamp معمولاً از یک پراپرتی بایت [] استفاده می شود که به عنوان یک ستون ROWVERSION در دیتابیس تنظیم می شود.متد IsConcurrencyToken برای مشخص كردن اینكه یك ویژگی در شرط Where باید در عبارت های Update یا Delete به عنوان بخشی از مدیریت همزمانی بگنجد، استفاده می شود.

Fluent API

متد Ignore

شما می توانید از متد Ignore برای جلوگیری از نگاشت یک Entity به جدول دیتابیس یا یک Property به ستون جدول استفاده کنید.

Fluent APIیا Fluent API

متد HasColumnName

با استفاده از این متد می توانید نام ستون معادل یک خصوصیت در جدول بانک اطلاعاتی را مشخص کنید.

Fluent API