Recherche…


Remarques

Convention est un ensemble de règles par défaut permettant de configurer automatiquement un modèle conceptuel basé sur les définitions de classe de domaine lorsque vous travaillez avec Code-First. Les conventions Code-First sont définies dans l'espace de noms System.Data.Entity.ModelConfiguration.Conventions ( EF 5 & EF 6 ).

Convention clé primaire

Par défaut, une propriété est une clé primaire si une propriété d'une classe s'appelle «ID» (non sensible à la casse), ou le nom de la classe suivi de «ID». Si le type de la propriété de clé primaire est numérique ou GUID, il sera configuré en tant que colonne d'identité. Exemple simple:

public class Room
{ 
    // Primary key 
    public int RoomId{ get; set; } 
    ... 
}

Suppression de conventions

Vous pouvez supprimer l'une des conventions définies dans l'espace de noms System.Data.Entity.ModelConfiguration.Conventions, en OnModelCreating méthode OnModelCreating .

L'exemple suivant supprime PluralizingTableNameConvention.

public class EshopContext : DbContext 
{ 
    public DbSet<Product> Products { set; get; }
    . . . 
 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
    } 
}

Par défaut, EF créera une table de base de données avec le nom de la classe d'entité suffixé par «s». Dans cet exemple, le code est d' abord configuré pour ignorer la convention PluralizingTableName donc, au lieu de dbo.Products tableau dbo.Product table sera créée.

Type de découverte

Par défaut, le code d'abord inclut dans le modèle

  1. Types définis en tant que propriété DbSet dans la classe de contexte.
  2. Les types de référence inclus dans les types d'entités même s'ils sont définis dans des assemblages différents.
  3. Classes dérivées même si seule la classe de base est définie comme propriété DbSet

Voici un exemple, nous ajoutons seulement Company comme DbSet<Company> dans notre classe de contexte:

public class Company
{
    public int Id { set; get; }
    public string Name { set; get; }
    public virtual ICollection<Department> Departments { set; get; }
}

public class Department
{
    public int Id { set; get; }
    public string Name { set; get; }
    public virtual ICollection<Person> Staff { set; get; }
}

[Table("Staff")]
public class Person
{
    public int Id { set; get; }
    public string Name { set; get; }
    public decimal Salary { set; get; }
}

public class ProjectManager : Person
{
   public string ProjectManagerProperty { set; get; }
}

public class Developer : Person
{
    public string DeveloperProperty { set; get; }
}

public class Tester : Person
{
    public string TesterProperty { set; get; }
}    

public class ApplicationDbContext : DbContext
{
    public DbSet<Company> Companies { set; get; }
}

Nous pouvons voir que toutes les classes sont incluses dans le modèle

entrer la description de l'image ici

DecimalPropertyConvention

Par défaut, Entity Framework mappe les propriétés décimales sur des colonnes décimales (18,2) dans les tables de base de données.

public class Box
{
    public int Id { set; get; }
    public decimal Length { set; get; }
    public decimal Width { set; get; }
    public decimal Height { set; get; }
}

entrer la description de l'image ici

Nous pouvons changer la précision des propriétés décimales:

1.Utilisez l'API Fluent:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Box>().Property(b => b.Width).HasPrecision(20, 4);
}

entrer la description de l'image ici

Seule la propriété "Width" est mappée en décimal (20, 4).

2. Remplacez la convention:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<DecimalPropertyConvention>();
    modelBuilder.Conventions.Add(new DecimalPropertyConvention(10, 4));
}

entrer la description de l'image ici

Chaque propriété décimale est mappée sur des colonnes décimales (10,4).

Convention Relationnelle

Code Commencez par déduire la relation entre les deux entités en utilisant la propriété de navigation. Cette propriété de navigation peut être un type de référence simple ou un type de collection. Par exemple, nous avons défini la propriété de navigation Standard dans la propriété Student et la propriété de navigation ICollection dans la classe Standard. Ainsi, Code First a automatiquement créé une relation un-à-plusieurs entre Standards et la table des étudiants en insérant la colonne de clé étrangère Standard_StandardId dans la table Students.

public class Student
{
    
    public int StudentID { get; set; }
    public string StudentName { get; set; }
    public DateTime DateOfBirth { get; set; }      
        
    //Navigation property
    public Standard Standard { get; set; }
}

public class Standard
{
   
    public int StandardId { get; set; }
    public string StandardName { get; set; }
    
    //Collection navigation property
    public IList<Student> Students { get; set; }
   
}

Les entités ci-dessus ont créé la relation suivante à l'aide de la clé étrangère Standard_StandardId.

entrer la description de l'image ici

Convention sur la clé étrangère

Si la classe A est en relation avec la classe B et que la classe B a une propriété avec le même nom et le même type que la clé primaire de A, alors EF suppose automatiquement que la propriété est une clé étrangère.

public class Department
{
    public int DepartmentId { set; get; }
    public string Name { set; get; }
    public virtual ICollection<Person> Staff { set; get; }
}

public class Person
{
    public int Id { set; get; }
    public string Name { set; get; }
    public decimal Salary { set; get; }
    public int DepartmentId { set; get; }
    public virtual Department Department { set; get; }
}

Dans ce cas, DepartmentId est une clé étrangère sans spécification explicite.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow