Öğretici: ASP.NET MVC uygulamasıyla EF Database First için veri doğrulamayı geliştirme

MVC, Entity Framework ve ASP.NET yapı iskelesi kullanarak, var olan bir veritabanına arabirim sağlayan bir web uygulaması oluşturabilirsiniz. Bu öğretici serisi, kullanıcıların bir veritabanı tablosunda bulunan verileri görüntülemesine, düzenlemesine, oluşturmasına ve silmesine olanak tanıyan kodu otomatik olarak nasıl oluşturabileceğinizi gösterir. Oluşturulan kod, veritabanı tablosundaki sütunlara karşılık gelir.

Bu öğretici, doğrulama gereksinimlerini ve görüntüleme biçimlendirmesini belirtmek için veri modeline veri ek açıklamaları eklemeye odaklanır. Açıklamalar bölümündeki kullanıcılardan gelen geri bildirimlere göre geliştirilmiştir.

Bu öğreticide şunları yaptınız:

  • Veri ek açıklamaları ekleme
  • Meta veri sınıfları ekleme

Önkoşullar

Veri ek açıklamaları ekleme

Önceki bir konuda gördüğünüz gibi, kullanıcı girişine bazı veri doğrulama kuralları otomatik olarak uygulanır. Örneğin, yalnızca Grade özelliği için bir sayı sağlayabilirsiniz. Daha fazla veri doğrulama kuralı belirtmek için model sınıfınıza veri ek açıklamaları ekleyebilirsiniz. Bu ek açıklamalar, belirtilen özellik için web uygulamanıza uygulanır. Özelliklerin görüntülenme biçimini değiştiren biçimlendirme öznitelikleri de uygulayabilirsiniz; örneğin, metin etiketleri için kullanılan değeri değiştirme.

Bu öğreticide, FirstName, LastName ve MiddleName özellikleri için sağlanan değerlerin uzunluğunu kısıtlamak için veri ek açıklamaları ekleyecektir. Veritabanında bu değerler 50 karakterle sınırlıdır; ancak, web uygulamanızda bu karakter sınırı şu anda zorlanmaz. Bir kullanıcı bu değerlerden biri için 50'den fazla karakter sağlarsa, değeri veritabanına kaydetmeye çalışırken sayfa kilitlenir. Ayrıca Not değerini 0 ile 4 arasında bir değerle kısıtlaacaksınız.

Modeller>ContosoModel.edmx>ContosoModel.tt'ı seçin ve Student.cs dosyasını açın. Sınıfına aşağıdaki vurgulanmış kodu ekleyin.

namespace ContosoSite.Models
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    
    public partial class Student
    {
        public Student()
        {
            this.Enrollments = new HashSet<Enrollment>();
        }
    
        public int StudentID { get; set; }
        [StringLength(50)]
        public string LastName { get; set; }
        [StringLength(50)]
        public string FirstName { get; set; }
        public Nullable<System.DateTime> EnrollmentDate { get; set; }
        [StringLength(50)]
        public string MiddleName { get; set; }
    
        public virtual ICollection<Enrollment> Enrollments { get; set; }
    }
}

Enrollment.cs dosyasını açın ve aşağıdaki vurgulanan kodu ekleyin.

namespace ContosoSite.Models
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    
    public partial class Enrollment
    {
        public int EnrollmentID { get; set; }
        [Range(0, 4)]
        public Nullable<decimal> Grade { get; set; }
        public int CourseID { get; set; }
        public int StudentID { get; set; }
    
        public virtual Course Course { get; set; }
        public virtual Student Student { get; set; }
    }
}

Çözümü derleyin.

Öğrenci listesi'ne tıklayın ve Düzenle'yi seçin. 50'den fazla karakter girmeye çalışırsanız, bir hata iletisi görüntülenir.

hata iletisini göster

Giriş sayfasına Geri dön. Kayıt listesi'ne tıklayın ve Düzenle'yi seçin. 4'in üzerinde bir not sağlamaya çalışma. Şu hatayı alırsınız: Not alanı 0 ile 4 arasında olmalıdır.

Meta veri sınıfları ekleme

Doğrulama özniteliklerini doğrudan model sınıfına eklemek, veritabanının değişmesini beklemediğinizde çalışır; ancak veritabanınız değişirse ve model sınıfını yeniden oluşturmanız gerekirse, model sınıfına uyguladığınız tüm öznitelikleri kaybedersiniz. Bu yaklaşım çok verimsiz olabilir ve önemli doğrulama kurallarını kaybetmeye eğilimli olabilir.

Bu sorunu önlemek için öznitelikleri içeren bir meta veri sınıfı ekleyebilirsiniz. Model sınıfını meta veri sınıfıyla ilişkilendirdiğinizde, bu öznitelikler modele uygulanır. Bu yaklaşımda model sınıfı, meta veri sınıfına uygulanmış olan tüm öznitelikler kaybolmadan yeniden oluşturulabilir.

Models klasörüne Metadata.cs adlı bir sınıf ekleyin.

Metadata.cs dosyasındaki kodu aşağıdaki kodla değiştirin.

using System;
using System.ComponentModel.DataAnnotations;

namespace ContosoSite.Models
{
    public class StudentMetadata
    {
        [StringLength(50)]
        [Display(Name="Last Name")]
        public string LastName;

        [StringLength(50)]
        [Display(Name="First Name")]
        public string FirstName;

        [StringLength(50)]
        [Display(Name="Middle Name")]
        public string MiddleName;

        [Display(Name = "Enrollment Date")]
        public Nullable<System.DateTime> EnrollmentDate;
    }

    public class EnrollmentMetadata
    {
        [Range(0, 4)]
        public Nullable<decimal> Grade;
    }
}

Bu meta veri sınıfları, model sınıflarına daha önce uyguladığınız tüm doğrulama özniteliklerini içerir. Display özniteliği, metin etiketleri için kullanılan değeri değiştirmek için kullanılır.

Şimdi model sınıflarını meta veri sınıflarıyla ilişkilendirmeniz gerekir.

Models klasörüne PartialClasses.cs adlı bir sınıf ekleyin.

Dosyanın içeriğini aşağıdaki kodla değiştirin.

using System;
using System.ComponentModel.DataAnnotations;

namespace ContosoSite.Models
{
    [MetadataType(typeof(StudentMetadata))]
    public partial class Student
    {
    }

    [MetadataType(typeof(EnrollmentMetadata))]
    public partial class Enrollment
    {
    }
}

Her sınıfın bir partial sınıf olarak işaretlendiğini ve her birinin ad ve ad alanıyla otomatik olarak oluşturulan sınıfla eşleş olduğuna dikkat edin. Meta veri özniteliğini kısmi sınıfa uygulayarak, veri doğrulama özniteliklerinin otomatik olarak oluşturulan sınıfa uygulanmasını sağlarsınız. Meta veri özniteliği yeniden üretilmeyen kısmi sınıflara uygulandığından, model sınıflarını yeniden oluşturduğunuzda bu öznitelikler kaybolmaz.

Otomatik olarak oluşturulan sınıfları yeniden oluşturmak için ContosoModel.edmx dosyasını açın. Bir kez daha tasarım yüzeyine sağ tıklayın ve Veritabanından Modeli Güncelleştir'i seçin. Veritabanını değiştirmemiş olsanız bile, bu işlem sınıfları yeniden oluşturur. Yenile sekmesinde Tablolar ve Son'u seçin.

Değişiklikleri uygulamak için ContosoModel.edmx dosyasını kaydedin.

Student.cs dosyasını veya Enrollment.cs dosyasını açın ve daha önce uyguladığınız veri doğrulama özniteliklerinin artık dosyada olmadığına dikkat edin. Ancak uygulamayı çalıştırın ve veri girdiğinizde doğrulama kurallarının hala uygulandığına dikkat edin.

Sonuç

Bu seri, kullanıcıların verileri düzenlemesine, güncelleştirmesine, oluşturmasına ve silmesine olanak tanıyan mevcut bir veritabanından kod oluşturmaya yönelik basit bir örnek sağladı. Projeyi oluşturmak için MVC 5, Entity Framework ve ASP.NET İskelesi ASP.NET kullandı.

Code First geliştirmesinin giriş niteliğindeki bir örneği için bkz. ASP.NET MVC 5 ile Çalışmaya Başlama.

Daha gelişmiş bir örnek için bkz . ASP.NET MVC 4 Uygulaması için Entity Framework Veri Modeli Oluşturma. İlk Veritabanı'ndaki verilerle çalışmak için kullandığınız DbContext API'sinin, Code First'daki verilerle çalışırken kullandığınız API ile aynı olduğunu unutmayın. Önce Veritabanı kullanmayı düşünseniz bile, bir Code First öğreticisinden ilgili verileri okuma ve güncelleştirme, eşzamanlılık çakışmalarını işleme gibi daha karmaşık senaryoları işlemeyi öğrenebilirsiniz. Tek fark veritabanı, bağlam sınıfı ve varlık sınıflarının oluşturulma şeklidir.

Ek kaynaklar

Özelliklere ve sınıflara uygulayabileceğiniz veri doğrulama ek açıklamalarının tam listesi için bkz. System.ComponentModel.DataAnnotations.

Sonraki adımlar

Bu öğreticide şunları yaptınız:

  • Veri ek açıklamaları eklendi
  • Meta veri sınıfları eklendi

Azure App Service'a bir web uygulaması ve SQL veritabanı dağıtmayı öğrenmek için şu öğreticiye bakın: