İlk Kod Kuralları

Code First, C# veya Visual Basic .NET sınıflarını kullanarak modeli açıklamanızı sağlar. Kuralları kullanılarak modelin temel şekli algılanır. Kurallar, Code First ile çalışırken sınıf tanımlarına göre kavramsal modeli otomatik olarak yapılandırmak için kullanılan kural kümeleridir. Kurallar System.Data.Entity.ModelConfiguration.Conventions ad alanında tanımlanır.

Veri ek açıklamalarını veya akıcı API'yi kullanarak modelinizi daha fazla yapılandırabilirsiniz. Öncelik, akıcı API aracılığıyla yapılandırmaya ve ardından veri ek açıklamaları ve ardından kurallar verilir. Daha fazla bilgi için bkz . Veri Ek Açıklamaları, Fluent API - İlişkiler, Fluent API - Türler ve Özellikler ve VB.NET ile Fluent API.

Code First kurallarının ayrıntılı bir listesi API Belgelerinde bulunabilir. Bu konu başlığında, Code First tarafından kullanılan kurallarla ilgili genel bir bakış sağlanır.

Tür Bulma

Code First geliştirmesini kullanırken genellikle kavramsal (etki alanı) modelinizi tanımlayan .NET Framework sınıfları yazarak başlarsınız. Sınıfları tanımlamaya ek olarak, DbContext'e modele hangi türleri eklemek istediğinizi de bildirmeniz gerekir. Bunu yapmak için, DbContext'ten türetilen ve modelin parçası olmasını istediğiniz türler için DbSet özelliklerini kullanıma sunan bir bağlam sınıfı tanımlarsınız. Code First bu türleri içerir ve ayrıca başvurulmuş türler farklı bir derlemede tanımlansa bile başvurulmuş türleri çeker.

Türleriniz bir devralma hiyerarşisine katılırsa, temel sınıf için bir DbSet özelliği tanımlamak yeterlidir ve türetilen türler, temel sınıfla aynı derlemede yer alıyorsa otomatik olarak eklenir.

Aşağıdaki örnekte SchoolEntities sınıfında (Departmanlar) tanımlanan tek bir DbSet özelliği vardır. Code First, başvurulan türleri bulmak ve çekmek için bu özelliği kullanır.

public class SchoolEntities : DbContext
{
    public DbSet<Department> Departments { get; set; }
}

public class Department
{
    // Primary key
    public int DepartmentID { get; set; }
    public string Name { get; set; }

    // Navigation property
    public virtual ICollection<Course> Courses { get; set; }
}

public class Course
{
    // Primary key
    public int CourseID { get; set; }

    public string Title { get; set; }
    public int Credits { get; set; }

    // Foreign key
    public int DepartmentID { get; set; }

    // Navigation properties
    public virtual Department Department { get; set; }
}

public partial class OnlineCourse : Course
{
    public string URL { get; set; }
}

public partial class OnsiteCourse : Course
{
    public string Location { get; set; }
    public string Days { get; set; }
    public System.DateTime Time { get; set; }
}

Bir türü modelden dışlamak istiyorsanız NotMapped özniteliğini veya DbModelBuilder.Ignore fluent API'sini kullanın.

modelBuilder.Ignore<Department>();

Birincil Anahtar Kuralı

Code First, bir sınıftaki bir özelliğin adı "ID" (büyük/küçük harfe duyarlı değil) veya ardından "ID" gelen sınıf adıysa bir özelliğin birincil anahtar olduğunu çıkarsar. Birincil anahtar özelliğinin türü sayısal veya GUID ise, kimlik sütunu olarak yapılandırılır.

public class Department
{
    // Primary key
    public int DepartmentID { get; set; }

    . . .  

}

İlişki Kuralı

Entity Framework'te gezinti özellikleri, iki varlık türü arasındaki ilişkide gezinmek için bir yol sağlar. Her nesne, katıldığı her ilişki için bir gezinti özelliğine sahip olabilir. Gezinti özellikleri, bir başvuru nesnesi (çokluk bir veya sıfır ya da bir ise) veya bir koleksiyon (çok fazlaysa) döndürerek ilişkilerde her iki yönde de gezinmenize ve bunları yönetmenize olanak sağlar. Code First, türlerinizde tanımlanan gezinti özelliklerine göre ilişkileri çıkarsar.

Gezinti özelliklerine ek olarak, bağımlı nesneleri temsil eden türlere yabancı anahtar özellikleri eklemenizi öneririz. Asıl birincil anahtar özelliğiyle aynı veri türüne ve aşağıdaki biçimlerden birini izleyen bir ada sahip herhangi bir özellik, ilişkinin yabancı anahtarını temsil eder: '<gezinti özelliği adı><asıl birincil anahtar özellik adı>', '<asıl sınıf adı><birincil anahtar özellik adı>' veya '<asıl birincil anahtar özellik adı>'. Birden çok eşleşme bulunursa öncelik yukarıda listelenen sırayla verilir. Yabancı anahtar algılama büyük/küçük harfe duyarlı değildir. Yabancı anahtar özelliği algılandığında Code First, yabancı anahtarın null atanabilirliğine göre ilişkinin çokluğunu çıkarsar. Özellik null atanabilirse ilişki isteğe bağlı olarak kaydedilir; aksi takdirde ilişki gerektiği gibi kaydedilir.

Bağımlı varlık üzerindeki bir yabancı anahtar null atanamazsa, Code First ilişkide art arda silmeyi ayarlar. Bağımlı varlık üzerindeki bir yabancı anahtar null atanabilirse, Code First ilişkide art arda silmeyi ayarlamaz ve sorumlu silindiğinde yabancı anahtar null olarak ayarlanır. Kural tarafından algılanan çokluk ve art arda silme davranışı, akıcı API kullanılarak geçersiz kılınabilir.

Aşağıdaki örnekte, Bölüm ve Kurs sınıfları arasındaki ilişkiyi tanımlamak için gezinti özellikleri ve yabancı anahtar kullanılır.

public class Department
{
    // Primary key
    public int DepartmentID { get; set; }
    public string Name { get; set; }

    // Navigation property
    public virtual ICollection<Course> Courses { get; set; }
}

public class Course
{
    // Primary key
    public int CourseID { get; set; }

    public string Title { get; set; }
    public int Credits { get; set; }

    // Foreign key
    public int DepartmentID { get; set; }

    // Navigation properties
    public virtual Department Department { get; set; }
}

Dekont

Aynı türler arasında birden çok ilişkiniz varsa (örneğin, Person sınıfının ReviewedBooks ve AuthoredBooks gezinti özelliklerini içerdiği ve Book sınıfının Yazar ve Gözden Geçiren gezinti özelliklerini içerdiği Kişi ve Kitap sınıflarınıtanımladığınız varsayılır), veri ek açıklamalarını veya akıcı API'yi kullanarak ilişkileri el ile yapılandırmanız gerekir. Daha fazla bilgi için bkz . Veri Ek Açıklamaları - İlişkiler ve Akıcı API - İlişkiler.

Karmaşık Türler Kuralı

Code First, birincil anahtarın çıkarılamadığı ve veri ek açıklamaları veya akıcı API aracılığıyla hiçbir birincil anahtar kaydedilmediği bir sınıf tanımı bulursa, tür otomatik olarak karmaşık bir tür olarak kaydedilir. Karmaşık tür algılama, türün varlık türlerine başvuran özelliklere sahip olmamasını ve başka bir türdeki koleksiyon özelliğinden başvurulmadığını da gerektirir. Aşağıdaki sınıf tanımları göz önünde bulundurulduğunda Code First , birincil anahtarı olmadığından Details'ın karmaşık bir tür olduğunu çıkarsar.

public partial class OnsiteCourse : Course
{
    public OnsiteCourse()
    {
        Details = new Details();
    }

    public Details Details { get; set; }
}

public class Details
{
    public System.DateTime Time { get; set; }
    public string Location { get; set; }
    public string Days { get; set; }
}

Bağlan ion Dize Kuralı

DbContext'in kullanılacak bağlantıyı bulmak için kullandığı kurallar hakkında bilgi edinmek için bkz. Bağlan ions ve Models.

Kuralları Kaldırma

System.Data.Entity.ModelConfiguration.Conventions ad alanında tanımlanan kuralların herhangi birini kaldırabilirsiniz. Aşağıdaki örnek PluralizingTableNameConvention'ı kaldırır.

public class SchoolEntities : DbContext
{
     . . .

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        // Configure Code First to ignore PluralizingTableName convention
        // If you keep this convention, the generated tables  
        // will have pluralized names.
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}

Özel Kurallar

Ef6'da özel kurallar desteklenir. Daha fazla bilgi için bkz. Özel Kod İlk Kuralları.