اتریبیوت MaxLength در EF Core چه کاربردی دارد؟ چگونه میتوانیم طول داده های مندرج در یک جدول را در روش کدفرست (CodeFirst) محدود کنیم تا از یک حدی که خودمات تعیین کرده ایم بیشتر نباشد؟
سلام ، آرزو ابراهیمی هستم برنامه نویس NET. و با یک مقاله آموزشی دیگر از فصل اموزش Entity Framework core از دوره اموزش asp.net core 3 در خدمت شما همراهان همیشگی میزفا هستم.
سرفصلهای پست
محدود کردن طول Property ها در روش Code First در EF Core
برای محدود کردن طول داده ها در روش CodeFirst میتوانیم از دو روش استفاده کنیم که در ادامه این مقاله آموزشی با این دو روش آشنا خواهید شد.
محدود کردن طول داده های جدول به روش Data Annotation Attributes
در این روش جهت محدود کردن طول دادهی یک ستون از جدول از اتریبیوت [MaxLength()]
بالای سر آن پراپرتی که میخواهیم طولش محدود شود ، استفاده میکنیم.
حالا به سراغ پروژه جلسه آموزشی گذشته میرویم این پروژه را باز کنید اگر یادتان باشد در جلسه آموزشی گذشته با اتریبیوت Required جهت اجباری کردن یک ستون از جدول آشنا شدیم و حالا میخواهیم با استفاده از اتریبیوت MaxLength طول پراپرتی Name و Family را محدود کنیم.
پس بالای سر پراپرتی Name و Family از اتریبیوت MaxLength استفاده میکنم و چون نمیخواهم که طول کاراکترهای این دوتا پراپرتی از 50 کاراکتر بیشتر باشد عدد 50 را به اتریبیوت MaxLength ارسال میکنم، مطابق با کد زیر :
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Threading.Tasks; namespace EFCore_C05.Models { [Table("StudentMaster")] public class Student { [Key] public string StudentId { get; set; } [Required] public string NationalCode { get; set; } [Column("FirstName")] [MaxLength(50)] public string Name { get; set; } [Column("LastName"),MaxLength(50)] public string Family { get; set; } public DateTime BirthDate { get; set; } } }[box type=”info” align=”” class=”” width=””]
نکته : از چندین اتریبیوت می تونید در یک سطر استفاده کنید مثلا به این صورت [Column(“LastName”),MaxLength(50)] فقط باید اتریبیوت ها با علامت , از هم جدا شوند.
[/box]حالا فقط باید دیتابیس را آپدیت کنیم بعد از آپدیت دیتابیس ، طول پراپرتی Name و Family به حداکثر 50 کاراکتر محدود خواهد شد.
چنانچه با نحوه آپدیت دیتابیس در asp.net core آشنایی ندارید پیشنهاد میکنم مقاله آموزش آپدیت دیتابیس در EF Core را حتما مطالعه نمایید.
محدود کردن طول داده های جدول به روش Fluent API
با استفاده از روش Fluent API که در مقاله آموزشی پیکربندی کلاس های Domain در Code First با آن آشنا شدید هم میتوانید طول داده ها را در روش CodeFirst محدود کنید.
ابتدا باید متد OnModelCreating را در کلاس Override ، StudentDBContext کنید سپس داخل این متد از کدهای زیر استفاده نمایید.
builder.Entity<Student>().Property(b => b.Name).HasColumnName("FirstName").HasMaxLength(50); builder.Entity<Student>().Property(b => b.Family).HasColumnName("LastName").HasMaxLength(50);
در کد بالا جهت محدود کردن طول پراپرتی های Name و Family از متد HasMaxLength()
استفاده کرده و عدد ۵۰ را به این متد ارسال کرده ایم چون نمیخواهیم که طول این دوتا Property از 50 تا بیشتر باشد.
پس متد OnModelCreating پس از تغییر به صورت زیر خواهد شد.
protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); builder.Entity<Student>().ToTable("StudentMaster").HasKey(b => b.StudentId); builder.Entity<Student>().Property(b => b.Name).HasColumnName("FirstName").HasMaxLength(50); builder.Entity<Student>().Property(b => b.Family).HasColumnName("LastName").HasMaxLength(50); builder.Entity<Student>().Property(b => b.NationalCode).IsRequired(); }
از اینکه دوره آموزش asp.net core را دنبال میکنید، سپاسگزارم و امیدوارم براتون مفید بوده باشه. اگر سوال پیشنهاد و انتقادی داشتید خوشحال میشم که باهام در میان بگذارید و حتما در اولین فرصت بهتون پاسخ میدم.?
3 پاسخ
سلام،اگر مقدار خاصیت MaxLength کنترل text Box،صفر در نظر گرفته
شده باشد، طول رشته کنترل Text Box چقدر خواهد شد؟
سلام ممنون از مقاله خوبتون بین دو روش که توضیح دادید تفاوتی وجود داره؟
سلام وقتتون بخیر … ممنونم خوش حالم براتون مفید بوده.
خیر تفاوتی وجود ندارد و هر دو ما رو به یک هدف مشترک می رسونه.