Entity Framework - Doğrulama
Bu bölümde, model verilerini doğrulamak için ADO.NET Entity Framework içinde kullanılabilecek doğrulama tekniklerini öğrenelim. Entity Framework, istemci tarafı doğrulama için bir kullanıcı arabirimine uygulanabilen veya sunucu tarafı doğrulaması için kullanılabilen çok çeşitli doğrulama özellikleri sağlar.
Entity Framework'te, veri doğrulama, bir uygulamadaki bozuk verileri yakalama çözümünün bir parçasıdır.
Entity Framework, çok çeşitli veri doğrulama yöntemleri kullanarak varsayılan olarak veritabanına yazılmadan önce tüm verileri doğrular.
Ancak Entity Framework, kullanıcı arabirimi veri doğrulamasından sonra gelir. Bu durumda, EF'nin oluşturduğu ve genel bir mesaj gösterdiği istisnaları işlemek için varlık doğrulamasına ihtiyaç vardır.
Hata kontrolünüzü iyileştirmek ve hata mesajlarını kullanıcıya nasıl geri iletmek için bazı veri doğrulama teknikleri vardır.
DbContext, ValidateEntity adlı bir Geçersiz Kılınabilir yönteme sahiptir. SaveChanges çağırdığınızda Entity Framework, durumu Değiştirilmemiş olan önbelleğindeki her varlık için bu yöntemi çağırır. Öğrenci Varlığı için aşağıdaki örnekte gösterildiği gibi doğrulama mantığını doğrudan buraya koyabilirsiniz.
public partial class UniContextEntities : DbContext {
protected override System.Data.Entity.Validation
.DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry,
System.Collections.Generic.IDictionary<object, object> items) {
if (entityEntry.Entity is Student) {
if (entityEntry.CurrentValues.GetValue<string>("FirstMidName") == "") {
var list = new List<System.Data.Entity
.Validation.DbValidationError>();
list.Add(new System.Data.Entity.Validation
.DbValidationError("FirstMidName", "FirstMidName is required"));
return new System.Data.Entity.Validation
.DbEntityValidationResult(entityEntry, list);
}
}
if (entityEntry.CurrentValues.GetValue<string>("LastName") == "") {
var list = new List<System.Data.Entity
.Validation.DbValidationError>();
list.Add(new System.Data.Entity.Validation
.DbValidationError("LastName", "LastName is required"));
return new System.Data.Entity.Validation
.DbEntityValidationResult(entityEntry, list);
}
return base.ValidateEntity(entityEntry, items);
}
}
Yukarıdaki ValidateEntity yönteminde, Öğrenci varlığı FirstMidName ve LastName özellikleri, bu özelliklerden herhangi birinin boş bir dizesi varsa kontrol edilir, ardından bir hata mesajı döndürür.
Yeni bir öğrencinin oluşturulduğu basit bir örneğe bakalım, ancak öğrencinin FirstMidName aşağıdaki kodda gösterildiği gibi boş bir dizedir.
class Program {
static void Main(string[] args) {
using (var context = new UniContextEntities()) {
Console.WriteLine("Adding new Student to the database");
Console.WriteLine();
try {
context.Students.Add(new Student() {
FirstMidName = "",
LastName = "Upston"
});
context.SaveChanges();
} catch (DbEntityValidationException dbValidationEx) {
foreach (DbEntityValidationResult entityErr in
dbValidationEx.EntityValidationErrors) {
foreach (DbValidationError error in entityErr.ValidationErrors) {
Console.WriteLine("Error: {0}",error.ErrorMessage);
}
}
}
Console.ReadKey();
}
}
}
Yukarıdaki örnek derlendiğinde ve yürütüldüğünde, konsol penceresinde aşağıdaki hata mesajını alacaksınız.
Adding new Student to the database
Error: FirstMidName is required
Daha iyi anlamak için yukarıdaki örneği adım adım uygulamanızı öneririz.