Entity Framework (EF) তে Validation এবং Data Annotation হল মডেল ক্লাসের ডেটা সঠিকতা নিশ্চিত করার দুটি গুরুত্বপূর্ণ টুল। Validation ব্যবহার করে আপনি ইনপুট ডেটার সঠিকতা যাচাই করতে পারেন এবং Data Annotation দ্বারা মডেল প্রোপার্টিতে ভ্যালিডেশন রুলস অ্যাপ্লাই করতে পারেন।
Data Annotation হল একটি প্রযুক্তি যা সি# ক্লাসের প্রোপার্টিতে অ্যাট্রিবিউট ব্যবহার করে ডেটা ভ্যালিডেশন রুলস নির্ধারণ করে। Entity Framework যখন মডেল ক্লাসের উপর Data Annotations ব্যবহার করে, তখন এটি স্বয়ংক্রিয়ভাবে ভ্যালিডেশন চেক করবে এবং সঠিকতা যাচাই করার জন্য প্রোপার্টি লেভেলে রুলস প্রয়োগ করবে।
Entity Framework এর মডেল ক্লাসে বিভিন্ন Data Annotation Attributes ব্যবহার করা হয়, যা ডেটা ভ্যালিডেশন করতে সহায়তা করে। কিছু সাধারণ Data Annotation Attributes নিচে আলোচনা করা হলো:
এই অ্যাট্রিবিউটটি ব্যবহার করে আপনি একটি প্রোপার্টিকে বাধ্যতামূলক হিসেবে চিহ্নিত করতে পারেন। অর্থাৎ, ফিল্ডটি খালি রাখা যাবে না।
public class Employee
{
public int Id { get; set; }
[Required(ErrorMessage = "Employee name is required.")]
public string Name { get; set; }
}
এখানে, Name
প্রোপার্টি খালি রাখা যাবে না এবং যদি খালি রাখা হয়, তবে "Employee name is required."
এরর মেসেজ দেখানো হবে।
এই অ্যাট্রিবিউটটি ব্যবহার করে আপনি একটি স্ট্রিং প্রোপার্টির সর্বাধিক দৈর্ঘ্য নির্ধারণ করতে পারেন।
public class Employee
{
public int Id { get; set; }
[StringLength(50, ErrorMessage = "Name cannot be longer than 50 characters.")]
public string Name { get; set; }
}
এখানে, Name
ফিল্ডের দৈর্ঘ্য ৫০ এর বেশি হতে পারবে না।
এই অ্যাট্রিবিউটটি ব্যবহার করে আপনি একটি সংখ্যার জন্য সীমা নির্ধারণ করতে পারেন।
public class Employee
{
public int Id { get; set; }
[Range(18, 65, ErrorMessage = "Age must be between 18 and 65.")]
public int Age { get; set; }
}
এখানে, Age
প্রোপার্টি ১৮ এবং ৬৫ এর মধ্যে হতে হবে, অন্যথায় "Age must be between 18 and 65."
এরর মেসেজ প্রদর্শিত হবে।
এই অ্যাট্রিবিউটটি ব্যবহার করে আপনি ইমেইল ফিল্ডের জন্য একটি ভ্যালিড ইমেইল ফর্ম্যাট নিশ্চিত করতে পারেন।
public class Employee
{
public int Id { get; set; }
[EmailAddress(ErrorMessage = "Please enter a valid email address.")]
public string Email { get; set; }
}
এখানে, Email
ফিল্ডটি একটি বৈধ ইমেইল ঠিকানা হতে হবে।
এই অ্যাট্রিবিউটটি ফোন নম্বরের বৈধতা নিশ্চিত করতে ব্যবহৃত হয়।
public class Employee
{
public int Id { get; set; }
[Phone(ErrorMessage = "Please enter a valid phone number.")]
public string PhoneNumber { get; set; }
}
এখানে, PhoneNumber
ফিল্ডে একটি বৈধ ফোন নম্বর থাকতে হবে।
এই অ্যাট্রিবিউটটি ব্যবহার করে আপনি একটি কাস্টম নিয়মে ইনপুট ভ্যালিডেট করতে পারেন।
public class Employee
{
public int Id { get; set; }
[RegularExpression(@"^[A-Za-z0-9]+$", ErrorMessage = "Username can only contain letters and numbers.")]
public string Username { get; set; }
}
এখানে, Username
ফিল্ডে শুধুমাত্র ইংরেজি অক্ষর এবং সংখ্যা থাকতে পারবে, অন্য কিছু থাকলে "Username can only contain letters and numbers."
এরর মেসেজ দেখানো হবে।
এই অ্যাট্রিবিউটটি দুটি প্রোপার্টির মান তুলনা করতে ব্যবহৃত হয়। এটি সাধারণত পাসওয়ার্ড এবং কনফার্ম পাসওয়ার্ড এর ক্ষেত্রে ব্যবহৃত হয়।
public class User
{
public int Id { get; set; }
[Required]
public string Password { get; set; }
[Required]
[Compare("Password", ErrorMessage = "Passwords do not match.")]
public string ConfirmPassword { get; set; }
}
এখানে, ConfirmPassword
ফিল্ডটি Password
এর সাথে মেলাতে হবে, অন্যথায় "Passwords do not match."
এরর মেসেজ দেখানো হবে।
Entity Framework মডেল ক্লাসে Data Annotation অ্যাট্রিবিউট ব্যবহার করে আপনির ডেটার সঠিকতা যাচাই করা হয়, তবে এটির জন্য আপনাকে DbContext এর SaveChanges
মেথড কল করার আগে Validation চেক চালাতে হয়। আপনি নিম্নলিখিত কোড ব্যবহার করে এটি বাস্তবায়ন করতে পারেন:
public class ApplicationDbContext : DbContext
{
public DbSet<Employee> Employees { get; set; }
public override int SaveChanges()
{
var entries = ChangeTracker.Entries()
.Where(e => e.State == EntityState.Added || e.State == EntityState.Modified);
foreach (var entry in entries)
{
if (!entry.IsValid()) // মডেল ভ্যালিডেশন চেক
{
throw new InvalidOperationException("Validation failed.");
}
}
return base.SaveChanges();
}
}
এখানে, SaveChanges
মেথডের মধ্যে আমরা ভ্যালিডেশন চেক করছি। যদি কোনো ইনপুট ফিল্ড ভুল থাকে, তাহলে এরর হ্যান্ডেল করা হবে।
Fluent API ব্যবহার করে আপনি আরও কাস্টম ভ্যালিডেশন রুলস সেট করতে পারেন। Data Annotations এর সাথে কিছু সীমাবদ্ধতা থাকলেও, Fluent API এর মাধ্যমে আপনি অনেক বেশি কাস্টমাইজেশন করতে পারবেন।
public class EmployeeConfiguration : IEntityTypeConfiguration<Employee>
{
public void Configure(EntityTypeBuilder<Employee> builder)
{
builder.Property(e => e.Name)
.IsRequired()
.HasMaxLength(50);
builder.Property(e => e.Age)
.HasDefaultValue(18);
}
}
এখানে:
Name
প্রোপার্টি কে বাধ্যতামূলক করা হয়েছে।Name
প্রোপার্টির সর্বোচ্চ দৈর্ঘ্য ৫০ ক্যারেক্টার পর্যন্ত সীমাবদ্ধ করা হয়েছে।Age
প্রোপার্টির জন্য একটি ডিফল্ট মান ১৮ নির্ধারণ করা হয়েছে।Data Annotation এবং Fluent API দিয়ে করা Validation ক্লায়েন্ট-সাইড এবং সার্ভার-সাইড উভয় জায়গাতেই কাজ করতে পারে। ASP.NET MVC বা ASP.NET Core এ jQuery Validation এবং Unobtrusive Validation ইনটিগ্রেশন এর মাধ্যমে ক্লায়েন্ট-সাইডে এই ভ্যালিডেশন চেক করা যেতে পারে।
@Html.ValidationMessageFor(model => model.Name)
এখানে, ValidationMessageFor
ট্যাগটি আপনার মডেলের জন্য সঠিক Validation Message প্রদর্শন করবে।
Entity Framework এ Validation এবং Data Annotation ব্যবহার করে আপনি ডেটার সঠিকতা সহজেই যাচাই করতে পারেন। Data Annotations দিয়ে মডেল প্রোপার্টিতে বিভিন্ন প্রকার ভ্যালিডেশন রুলস যোগ করা সম্ভব, যেমন Required
, StringLength
, Range
, ইত্যাদি। এটির মাধ্যমে আপনি ডেটাবেসে ডেটা সঞ্চালন করার আগে ইনপুট ফিল্ডগুলির সঠিকতা নিশ্চিত করতে পারবেন।
Entity Framework এবং ASP.NET Core এ Model Validation একটি গুরুত্বপূর্ণ বিষয়। এটি ব্যবহারকারীর ইনপুটের সঠিকতা নিশ্চিত করতে সাহায্য করে। Data Annotations হল একটি সহজ পদ্ধতি যা আপনাকে মডেল প্রোপার্টির ওপর বিভিন্ন বৈধতা (validation) বিধিনিষেধ আরোপ করতে দেয়। এগুলি এমন অ্যাট্রিবিউট যা মডেল ক্লাসের প্রপার্টির সাথে যুক্ত থাকে এবং যখন ডেটা সেভ বা সাবমিট করা হয়, তখন এগুলি পরীক্ষা করা হয়।
এখানে আমরা দেখব কিভাবে Data Annotation Attribute ব্যবহার করে মডেল ভ্যালিডেশন করা যায়।
ASP.NET Core বা Entity Framework এ বিভিন্ন Data Annotation অ্যাট্রিবিউট ব্যবহার করা হয়, যেমন:
Required
StringLength
Range
RegularExpression
EmailAddress
Compare
DataType
Range
প্রতিটি অ্যাট্রিবিউটের মাধ্যমে বিভিন্ন ধরণের ভ্যালিডেশন করা যায়। নিচে বিস্তারিতভাবে আলোচনা করা হলো।
Required
AttributeRequired
অ্যাট্রিবিউটটি ব্যবহার করা হয়, কোনো প্রপার্টি ফাঁকা না থাকা নিশ্চিত করার জন্য। এটি প্রোপার্টির মান অবশ্যই প্রদান করতে হবে।
public class Student
{
public int Id { get; set; }
[Required(ErrorMessage = "Name is required")]
public string Name { get; set; }
public int Age { get; set; }
}
এখানে, Name
প্রপার্টি Required
অ্যাট্রিবিউট ব্যবহার করে মার্ক করা হয়েছে। এর মানে, Name
ফিল্ডটি ফাঁকা রাখা যাবে না এবং যদি ফাঁকা রাখা হয়, তাহলে কাস্টম মেসেজ "Name is required" দেখানো হবে।
StringLength
AttributeStringLength
অ্যাট্রিবিউটটি ব্যবহার করে আপনি স্ট্রিং প্রপার্টির সর্বোচ্চ এবং সর্বনিম্ন দৈর্ঘ্য নির্ধারণ করতে পারেন।
public class Student
{
public int Id { get; set; }
[StringLength(50, MinimumLength = 2, ErrorMessage = "Name must be between 2 and 50 characters")]
public string Name { get; set; }
public int Age { get; set; }
}
এখানে, Name
ফিল্ডের দৈর্ঘ্য ২ থেকে ৫০ অক্ষরের মধ্যে থাকতে হবে। এর বাইরে গেলে কাস্টম মেসেজ "Name must be between 2 and 50 characters" দেখানো হবে।
Range
AttributeRange
অ্যাট্রিবিউটটি ব্যবহার করা হয় একটি প্রপার্টির মান নির্দিষ্ট পরিসরের মধ্যে থাকতে হবে, এমনভাবে সুনির্দিষ্ট করার জন্য। এটি সংখ্যার জন্য বিশেষভাবে কার্যকর।
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
[Range(18, 100, ErrorMessage = "Age must be between 18 and 100")]
public int Age { get; set; }
}
এখানে, Age
প্রপার্টি ১৮ থেকে ১০০ এর মধ্যে থাকতে হবে। এই পরিসরের বাইরে গেলে কাস্টম মেসেজ দেখানো হবে: "Age must be between 18 and 100"।
RegularExpression
AttributeRegularExpression
অ্যাট্রিবিউটটি একটি নির্দিষ্ট প্যাটার্নে ডেটা যাচাই করার জন্য ব্যবহৃত হয়। এটি সাধারণত ইমেইল বা ফোন নম্বরের মতো নির্দিষ্ট ফরম্যাটের জন্য ব্যবহার করা হয়।
public class Student
{
public int Id { get; set; }
[RegularExpression(@"^[a-zA-Z]+$", ErrorMessage = "Name can only contain letters")]
public string Name { get; set; }
public int Age { get; set; }
}
এখানে, Name
প্রপার্টি শুধুমাত্র অক্ষর (letters) গ্রহণ করবে। অন্য কিছু ইনপুট দিলে কাস্টম মেসেজ "Name can only contain letters" দেখানো হবে।
EmailAddress
AttributeEmailAddress
অ্যাট্রিবিউটটি ইমেইল ফরম্যাট যাচাই করতে ব্যবহৃত হয়।
public class Student
{
public int Id { get; set; }
[EmailAddress(ErrorMessage = "Invalid email address")]
public string Email { get; set; }
public int Age { get; set; }
}
এখানে, Email
প্রপার্টি শুধুমাত্র সঠিক ইমেইল ফরম্যাটে থাকতে হবে। যদি সঠিক ফরম্যাট না হয়, তবে "Invalid email address" মেসেজ প্রদর্শিত হবে।
Compare
AttributeCompare
অ্যাট্রিবিউটটি দুটি প্রপার্টির মান তুলনা করতে ব্যবহৃত হয়, যেমন পাসওয়ার্ড এবং কনফার্ম পাসওয়ার্ড।
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
[Required]
public string Password { get; set; }
[Required]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
এখানে, Password
এবং ConfirmPassword
দুটি প্রপার্টি তুলনা করা হচ্ছে। যদি তাদের মান একই না হয়, তবে "The password and confirmation password do not match." মেসেজ দেখানো হবে।
DataType
AttributeDataType
অ্যাট্রিবিউটটি একটি প্রপার্টির জন্য উপযুক্ত ডেটা টাইপ নির্দেশ করতে ব্যবহৃত হয়। এটি যেমন, ফোন নম্বর, ইমেইল, পাসওয়ার্ড ইত্যাদির জন্য সঠিক ফরম্যাট নির্দেশ করতে পারে।
public class Student
{
public int Id { get; set; }
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[DataType(DataType.Password)]
public string Password { get; set; }
}
এখানে, Email
এবং Password
প্রপার্টির জন্য উপযুক্ত ডেটা টাইপ (ইমেইল এবং পাসওয়ার্ড) নির্ধারণ করা হয়েছে।
Data Annotation অ্যাট্রিবিউটগুলি Entity Framework বা ASP.NET Core এর মাধ্যমে Model Validation প্রক্রিয়ায় ব্যবহৃত হয়। আপনি যখন একটি মডেল (যেমন Student
) তৈরি করেন এবং তার পর ডেটা সাবমিট করেন, তখন এগুলির মাধ্যমে স্বয়ংক্রিয়ভাবে যাচাই করা হয়। যদি কোনো প্রপার্টি ইনভ্যালিড হয়, তবে তা টেমপ্লেট বা কাস্টম মেসেজের মাধ্যমে ব্যবহারকারীকে জানানো হয়।
var student = new Student { Name = "", Age = 17 };
var validationResults = new List<ValidationResult>();
var validationContext = new ValidationContext(student, null, null);
bool isValid = Validator.TryValidateObject(student, validationContext, validationResults, true);
if (!isValid)
{
foreach (var validationResult in validationResults)
{
Console.WriteLine(validationResult.ErrorMessage);
}
}
এখানে, TryValidateObject
মেথড ব্যবহার করে মডেলের সব প্রপার্টি যাচাই করা হয়েছে। যদি কোনো ত্রুটি থাকে, তবে validationResults
এ তা পাওয়া যাবে এবং ত্রুটি মেসেজ প্রদর্শিত হবে।
Data Annotation Attribute ব্যবহার করে মডেল ভ্যালিডেশন খুবই সহজ এবং কার্যকরী একটি পদ্ধতি। এটি ডেটাবেসে বা ব্যবহারকারী ইনপুটের সময় সঠিকতা নিশ্চিত করতে সাহায্য করে। সঠিকভাবে ফিল্ড ভ্যালিডেশন প্রয়োগ করার মাধ্যমে আপনি অ্যাপ্লিকেশনটির ডেটা নিরাপত্তা এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে পারেন।
Entity Framework (EF) এবং ASP.NET Core তে Custom Validation Rules তৈরি করার মাধ্যমে আপনি আপনার মডেলগুলোর জন্য বিশেষ শর্ত বা কাস্টম ব্যতিক্রম নিয়ন্ত্রণ করতে পারেন। Entity Framework এবং ASP.NET Core মডেলগুলির জন্য Data Annotations এবং Fluent API ব্যবহার করে বৈধতা চেক করা যায়, তবে কিছু ক্ষেত্রে আপনার নিজস্ব কাস্টম লজিক প্রয়োগ করতে হয়, যা Custom Validation Attributes ব্যবহার করে করা যায়।
Data Annotation এর মাধ্যমে আপনি মডেল প্রোপার্টির জন্য কাস্টম বৈধতা নির্ধারণ করতে পারেন। Entity Framework মডেল ক্লাসে Validation Attribute ব্যবহার করে আপনার কাস্টম শর্ত যোগ করা হয়।
আপনি যদি কোন নির্দিষ্ট শর্তের জন্য Custom Validation করতে চান, তাহলে ValidationAttribute ক্লাসটি ইনহেরিট করে একটি কাস্টম অ্যাট্রিবিউট তৈরি করতে হবে। এতে, আপনি IsValid মেথডে আপনার কাস্টম লজিক লেখেন।
উদাহরণ: Age
ফিল্ডের জন্য একটি কাস্টম ভ্যালিডেশন তৈরি করা, যা 18 বছরের নিচে বয়সে অগ্রাহ্য করবে।
public class MinAgeAttribute : ValidationAttribute
{
private readonly int _minAge;
public MinAgeAttribute(int minAge)
{
_minAge = minAge;
}
public override bool IsValid(object value)
{
if (value == null)
{
return false;
}
int age = (int)value;
return age >= _minAge;
}
}
এখন, MinAge অ্যাট্রিবিউটটি ব্যবহার করে আপনার মডেল ফিল্ডের জন্য ভ্যালিডেশন তৈরি করা যাবে:
public class User
{
public int UserId { get; set; }
[MinAge(18, ErrorMessage = "Age must be at least 18.")]
public int Age { get; set; }
}
এখানে, MinAge
অ্যাট্রিবিউটটি নিশ্চিত করবে যে, Age প্রপার্টি ১৮ এর কম না হয়। যদি কম হয়, তবে একটি এরর মেসেজ প্রদান করা হবে।
এখন, আপনি ModelState এর মাধ্যমে কাস্টম ভ্যালিডেশন চেক করতে পারেন:
var user = new User { Age = 16 };
var validationContext = new ValidationContext(user, null, null);
var validationResults = new List<ValidationResult>();
bool isValid = Validator.TryValidateObject(user, validationContext, validationResults, true);
if (!isValid)
{
foreach (var validationResult in validationResults)
{
Console.WriteLine(validationResult.ErrorMessage);
}
}
এখানে, Validator.TryValidateObject মেথডটি ব্যবহার করা হয়েছে, যা মডেলের উপর কাস্টম ভ্যালিডেশন প্রয়োগ করে এবং ফলস্বরূপ এরর মেসেজ পাবে।
যদি আপনি Fluent API ব্যবহার করে Entity Framework এ কাস্টম ভ্যালিডেশন করতে চান, তবে আপনাকে OnModelCreating মেথডে কাস্টম লজিক প্রয়োগ করতে হবে। তবে, Data Annotations দিয়ে যে কাস্টম ভ্যালিডেশন করা হয়, তা Fluent API তে প্রোগ্রাম্যাটিক্যালি সেলফ-ডিফাইন করা যায়।
উদাহরণ: পূর্বের MinAgeAttribute
কাস্টম ভ্যালিডেশন Fluent API ব্যবহার করে ইমপ্লিমেন্ট করা:
public class ApplicationDbContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.Property(u => u.Age)
.HasCheckConstraint("CK_Age", "Age >= 18");
}
}
এখানে, HasCheckConstraint ব্যবহার করে একটি SQL কন্ডিশন যুক্ত করা হয়েছে, যা নিশ্চিত করে যে Age প্রপার্টি ১৮ এর কম নয়।
যখন আপনার ভ্যালিডেশন শর্ত আরও জটিল হয় এবং একাধিক প্রপার্টি একে অপরের ওপর নির্ভরশীল হয়, তখন আপনি কাস্টম লজিক ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি যদি চান যে StartDate
এবং EndDate
এর মধ্যে নির্দিষ্ট শর্তের ভিত্তিতে ভ্যালিডেশন হতে হবে, তাহলে আপনি তা কাস্টম ভ্যালিডেশনের মাধ্যমে করতে পারবেন।
public class DateRangeAttribute : ValidationAttribute
{
private readonly string _startDateProperty;
private readonly string _endDateProperty;
public DateRangeAttribute(string startDateProperty, string endDateProperty)
{
_startDateProperty = startDateProperty;
_endDateProperty = endDateProperty;
}
public override bool IsValid(object value)
{
var startDateProperty = value.GetType().GetProperty(_startDateProperty);
var endDateProperty = value.GetType().GetProperty(_endDateProperty);
if (startDateProperty == null || endDateProperty == null)
{
return false;
}
var startDate = (DateTime?)startDateProperty.GetValue(value);
var endDate = (DateTime?)endDateProperty.GetValue(value);
if (startDate.HasValue && endDate.HasValue)
{
return startDate <= endDate;
}
return true;
}
}
এখানে, DateRangeAttribute অ্যাট্রিবিউটটি নিশ্চিত করে যে, StartDate
এর আগে EndDate
হবে না।
ব্যবহার:
public class Event
{
public int EventId { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
[DateRange("StartDate", "EndDate", ErrorMessage = "End Date must be greater than or equal to Start Date.")]
public string EventName { get; set; }
}
এখানে, StartDate
এবং EndDate
একে অপরের উপর নির্ভরশীল হওয়ায় কাস্টম ভ্যালিডেশন লাগানো হয়েছে।
ASP.NET Core এ, আপনি কাস্টম ভ্যালিডেশন শুধুমাত্র সার্ভার সাইডে নয়, বরং Client-side Validation সাথেও একত্রে ব্যবহার করতে পারেন। এটি jQuery Validation বা Unobtrusive Validation ব্যবহার করে করা যেতে পারে।
উদাহরণ: ক্লায়েন্ট সাইডে কাস্টম ভ্যালিডেশন অ্যাট্রিবিউট যোগ করা:
<input type="text" id="age" name="age" data-val="true" data-val-minage="Age must be at least 18" />
এখানে, data-val-minage ব্যবহার করে কাস্টম ভ্যালিডেশন মেসেজ যুক্ত করা হয়েছে।
Custom Validation Rules তৈরি করার মাধ্যমে আপনি আপনার মডেলগুলিতে প্রোগ্রাম্যাটিক্যালি বিশেষ শর্ত প্রয়োগ করতে পারবেন, যা ডেটার সঠিকতা নিশ্চিত করে এবং ইউজারের ভুল ইনপুট থেকে নিরাপত্তা প্রদান করে। Data Annotations এবং Fluent API ব্যবহার করে আপনি খুব সহজেই কাস্টম ভ্যালিডেশন যুক্ত করতে পারেন এবং প্রয়োজনে ক্লায়েন্ট-সাইড ভ্যালিডেশনও ইন্টিগ্রেট করতে পারেন।
Entity Framework (EF) Core এ, মডেল বৈধতা (validation) কনফিগার করার জন্য দুটি প্রধান পদ্ধতি রয়েছে: Data Annotations এবং Fluent API। যেখানে Data Annotations দিয়ে বৈধতা কনফিগার করা যায় মডেল ক্লাসের প্রপার্টিতে সরাসরি অটোমেটিকভাবে, সেখানে Fluent API একটি শক্তিশালী এবং নমনীয় পদ্ধতি প্রদান করে, যা বিশেষ কনফিগারেশন ও কমপ্লেক্স বৈধতা নিয়ম তৈরি করতে সক্ষম।
Fluent API দিয়ে বৈধতা কনফিগারেশন করার সময় আপনি অনেক ধরনের শর্ত, সীমানা (constraints), এবং সম্পর্কের মডেল কনফিগারেশন সেট করতে পারবেন, যা ডেটাবেসের স্তরে সম্পাদিত হয় এবং কোডে আরও কাস্টমাইজডভাবে বৈধতা পরিচালনা করতে সহায়তা করে।
যেকোনো প্রপার্টি যদি Required (অবশ্যই পূর্ণাঙ্গ হতে হবে) হতে হয়, তাহলে আপনি Fluent API এর IsRequired()
মেথড ব্যবহার করে এই শর্তটি প্রয়োগ করতে পারেন।
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.Property(s => s.Name)
.IsRequired(); // Name প্রপার্টি অবশ্যই পূর্ণাঙ্গ হতে হবে
}
}
এখানে, Name
প্রপার্টি Required হিসেবে কনফিগার করা হয়েছে, যার মানে এটি null
হতে পারবে না।
StringLength
বৈধতা সেট করার জন্য, Fluent API-তে HasMaxLength()
এবং HasMinLength()
মেথড ব্যবহার করা হয়। এতে আপনি প্রপার্টির সর্বোচ্চ এবং সর্বনিম্ন দৈর্ঘ্য নির্ধারণ করতে পারবেন।
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.Property(s => s.Name)
.HasMaxLength(100) // Name প্রপার্টির সর্বোচ্চ দৈর্ঘ্য 100 চরিত্র
.HasMinLength(5); // Name প্রপার্টির সর্বনিম্ন দৈর্ঘ্য 5 চরিত্র
}
}
এখানে, Name
প্রপার্টির সর্বোচ্চ দৈর্ঘ্য 100 এবং সর্বনিম্ন দৈর্ঘ্য 5 চরিত্র নির্ধারণ করা হয়েছে।
Fluent API দিয়ে Range বৈধতা কনফিগার করার জন্য HasRange()
মেথড ব্যবহার করা হয়। এটি একটি প্রপার্টির মান সীমাবদ্ধ করতে সাহায্য করে, যেমন একটি বয়সের ক্ষেত্রের মধ্যে পরিসীমা নির্ধারণ করা।
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.Property(s => s.Age)
.HasRange(18, 60); // Age প্রপার্টির পরিসীমা 18 থেকে 60 এর মধ্যে হবে
}
}
এখানে, Age
প্রপার্টির মান 18 থেকে 60 এর মধ্যে হতে হবে।
Fluent API এর মাধ্যমে Regular Expression (regex) কনফিগার করা যায়, যাতে একটি প্রপার্টি নির্দিষ্ট প্যাটার্নে মান গ্রহণ করে। এটি নাম, ফোন নম্বর বা ইমেইল এর মতো ফিল্ডের জন্য বিশেষভাবে উপযোগী।
public class Student
{
public int StudentId { get; set; }
public string Email { get; set; }
}
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.Property(s => s.Email)
.HasDefaultValue("")
.HasMaxLength(200)
.HasColumnType("nvarchar")
.IsRequired()
.HasComment("Student's Email Address")
.HasAnnotation("Unique", true);
}
}
এখানে email
প্রপার্টির মাধ্যমে সেট করা হয়েছে যে কোনো রেকর্ড এর email ভ্যালিড হতে হবে, regex
দিয়ে নিয়ম উল্লেখ করা হতে পারে।
Client-side validation এবং Server-side validation দুটি ভিন্ন ধরনের ডেটা যাচাইকরণ প্রক্রিয়া, যেগুলি web অ্যাপ্লিকেশনগুলিতে ডেটার সঠিকতা নিশ্চিত করতে ব্যবহৃত হয়। এই দুটি যাচাইকরণ প্রক্রিয়া একে অপরকে পরিপূরক হিসেবে কাজ করে, যেখানে client-side validation ব্যবহারকারীর অভিজ্ঞতা উন্নত করে এবং server-side validation সিকিউরিটি এবং ডেটা ইন্টেগ্রিটি নিশ্চিত করে।
Entity Framework (EF) এবং ASP.NET Core সহ অন্যান্য টেকনোলজির সাথে Client-side এবং Server-side validation একত্রে ব্যবহার করলে একটি শক্তিশালী এবং নিরাপদ validation সিস্টেম তৈরি করা সম্ভব।
Client-side validation সাধারণত JavaScript বা jQuery ব্যবহার করে করা হয়, যা ব্যবহারকারীর ব্রাউজারে ফর্ম ডেটা যাচাই করে। এটি ফর্ম সাবমিট হওয়ার আগে ব্যবহারকারীকে ত্রুটি বা ভুল তথ্য জানানোর জন্য কার্যকর। এর প্রধান সুবিধা হল তা সরাসরি ব্যবহারকারীর ডিভাইসে ঘটে, ফলে সিস্টেমের সার্ভার লোড কমে এবং ইউজার ইন্টারঅ্যাকশন দ্রুত হয়।
ASP.NET Core তে jQuery Validation প্লাগিন সাধারণত ব্যবহার করা হয়, যা ক্লায়েন্ট সাইডে ডেটা ভ্যালিডেশন বাস্তবায়ন করে।
<form id="myForm">
<label for="email">Email:</label>
<input type="email" id="email" name="email" required />
<label for="password">Password:</label>
<input type="password" id="password" name="password" required minlength="6" />
<button type="submit">Submit</button>
</form>
<script>
$(document).ready(function() {
$("#myForm").validate({
rules: {
email: {
required: true,
email: true
},
password: {
required: true,
minlength: 6
}
},
messages: {
email: {
required: "Please enter an email address",
email: "Please enter a valid email"
},
password: {
required: "Please enter a password",
minlength: "Password must be at least 6 characters"
}
}
});
});
</script>
এখানে, jQuery Validation প্লাগিন ব্যবহার করে আমরা ফর্মের ইনপুট ভ্যালিডেশন করেছি। যখন ব্যবহারকারী ফর্মটি সাবমিট করার চেষ্টা করবে, তখন email এবং password এর জন্য ত্রুটি বার্তা দেখানো হবে যদি তা সঠিক না হয়।
Server-side validation হল যখন ফর্মের ডেটা সার্ভারে পাঠানো হয় এবং সার্ভার সাইডে তা যাচাই করা হয়। এটি ব্যবহারকারীর ইনপুটের উপর প্রোগ্রাম্যাটিক যাচাইকরণ করে এবং ত্রুটির ক্ষেত্রে সংশোধন প্রক্রিয়া চালায়। Server-side validation এর মূল সুবিধা হল এটি নিরাপত্তা নিশ্চিত করে, কারণ ক্লায়েন্ট সাইডের ভ্যালিডেশন সহজে বাইপাস করা যেতে পারে, কিন্তু সার্ভার সাইড যাচাইকরণ বাইপাস করা সম্ভব নয়।
ASP.NET Core তে Data Annotations ব্যবহার করে server-side validation করা যেতে পারে। Model এর উপরে Data Annotations যোগ করা হয়, যা কনফিগারেশন এবং সঠিকতা নিশ্চিত করে।
public class UserModel
{
[Required(ErrorMessage = "Email is required.")]
[EmailAddress(ErrorMessage = "Invalid email format.")]
public string Email { get; set; }
[Required(ErrorMessage = "Password is required.")]
[MinLength(6, ErrorMessage = "Password must be at least 6 characters long.")]
public string Password { get; set; }
}
public class UserController : Controller
{
[HttpPost]
public IActionResult Register(UserModel model)
{
if (ModelState.IsValid)
{
// Process registration
return RedirectToAction("Success");
}
// Return to the same view with validation errors
return View(model);
}
}
এখানে, UserModel ক্লাসে Data Annotations ব্যবহার করা হয়েছে। ফর্ম সাবমিট হওয়ার পর ModelState.IsValid চেক করে, যদি মডেল বৈধ না হয়, তাহলে ত্রুটি বার্তাগুলি View তে প্রদর্শিত হবে।
যখন আমরা client-side এবং server-side validation একত্রে ব্যবহার করি, তখন একটি দুই স্তরের যাচাইকরণ প্রক্রিয়া তৈরি হয়। এখানে, client-side validation ব্যবহারকারীর কাছে দ্রুত ত্রুটি বার্তা পাঠিয়ে তাদের টাইম সেভ করতে সাহায্য করে, এবং server-side validation নিশ্চিত করে যে, সব ইনপুট ডেটা সঠিক এবং নিরাপদ। এটি একে অপরকে পরিপূরক হিসেবে কাজ করে।
<form id="registrationForm" method="post" asp-action="Register">
<label for="email">Email:</label>
<input type="email" id="email" name="Email" required />
<label for="password">Password:</label>
<input type="password" id="password" name="Password" required minlength="6" />
<button type="submit">Submit</button>
</form>
<script>
$(document).ready(function () {
$("#registrationForm").validate({
rules: {
email: {
required: true,
email: true
},
password: {
required: true,
minlength: 6
}
},
messages: {
email: {
required: "Please enter an email address",
email: "Please enter a valid email address"
},
password: {
required: "Please enter a password",
minlength: "Password must be at least 6 characters"
}
}
});
});
</script>
ASP.NET Core Controller (Server-side Validation)
public class UserModel
{
[Required(ErrorMessage = "Email is required.")]
[EmailAddress(ErrorMessage = "Invalid email format.")]
public string Email { get; set; }
[Required(ErrorMessage = "Password is required.")]
[MinLength(6, ErrorMessage = "Password must be at least 6 characters long.")]
public string Password { get; set; }
}
public class UserController : Controller
{
[HttpPost]
public IActionResult Register(UserModel model)
{
if (ModelState.IsValid)
{
// Process registration
return RedirectToAction("Success");
}
// Return to the same view with validation errors
return View(model);
}
}
এখানে, client-side validation ব্যবহারকারীর ইনপুট ত্রুটির জন্য তৎক্ষণাৎ প্রতিক্রিয়া দেখায় এবং server-side validation নিশ্চিত করে যে, ডেটাবেসে নিরাপদ এবং সঠিক ডেটা সংরক্ষিত হচ্ছে। ফলে, আপনার অ্যাপ্লিকেশন শক্তিশালী এবং সুরক্ষিত হয়।
Client-side validation ব্যবহারকারীর অভিজ্ঞতা উন্নত করে এবং দ্রুত ত্রুটি বার্তা প্রদান করে, যেখানে server-side validation ডেটার সঠিকতা এবং নিরাপত্তা নিশ্চিত করে। এই দুটি একত্রে ব্যবহার করার ফলে আপনার অ্যাপ্লিকেশন দ্রুত, নিরাপদ এবং ব্যবহারকারী-বান্ধব হয়।
common.read_more