Buscar..


Observaciones

Convention es un conjunto de reglas predeterminadas para configurar automáticamente un modelo conceptual basado en definiciones de clase de dominio cuando se trabaja con Code-First. Las convenciones de Code-First se definen en System.Data.Entity.ModelConfiguration.Conventions espacio de nombres ( EF 5 & EF 6 ).

Convención de Clave Primaria

Por defecto, una propiedad es una clave principal si una propiedad en una clase se denomina "ID" (no distingue entre mayúsculas y minúsculas), o el nombre de la clase seguido de "ID". Si el tipo de propiedad de clave principal es numérico o GUID, se configurará como una columna de identidad. Ejemplo simple:

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

Eliminando Convenciones

Puede eliminar cualquiera de las convenciones definidas en el espacio de nombres System.Data.Entity.ModelConfiguration.Conventions, reemplazando el método OnModelCreating .

El siguiente ejemplo elimina PluralizingTableNameConvention.

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

Por defecto, EF creará una tabla de base de datos con el nombre de la clase de la entidad con el sufijo 's'. En este ejemplo, Code First está configurado para ignorar la convención dbo.Products , por lo que, en lugar de dbo.Products table, se dbo.Product tabla dbo.Product .

Tipo de descubrimiento

Por defecto el Código Primero incluye en el modelo

  1. Tipos definidos como una propiedad DbSet en la clase de contexto.
  2. Tipos de referencia incluidos en los tipos de entidad, incluso si se definen en un conjunto diferente.
  3. Clases derivadas incluso si solo la clase base se define como propiedad DbSet

Aquí hay un ejemplo, que solo estamos agregando Company as DbSet<Company> en nuestra clase de contexto:

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; }
}

Podemos ver que todas las clases están incluidas en el modelo.

introduzca la descripción de la imagen aquí

DecimalPropertyConvention

Por defecto, Entity Framework asigna las propiedades decimales a columnas decimales (18,2) en las tablas de la base de datos.

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

introduzca la descripción de la imagen aquí

Podemos cambiar la precisión de las propiedades decimales:

1.Utilizar la API fluida:

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

introduzca la descripción de la imagen aquí

Sólo la propiedad "Ancho" se asigna a decimal (20, 4).

2. Reemplazar la convención:

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

introduzca la descripción de la imagen aquí

Cada propiedad decimal se asigna a columnas decimales (10,4).

Convenio de relacion

Código Primero inferir la relación entre las dos entidades utilizando la propiedad de navegación. Esta propiedad de navegación puede ser un tipo de referencia simple o un tipo de colección. Por ejemplo, definimos la propiedad de navegación estándar en la clase de estudiante y la propiedad de navegación de ICollection en la clase estándar. Por lo tanto, Code First creó automáticamente una relación de uno a varios entre los estándares y la tabla de base de datos de estudiantes insertando la columna de clave foránea Standard_StandardId en la tabla de estudiantes.

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; }
   
}

Las entidades anteriores crearon la siguiente relación utilizando la clave foránea Standard_StandardId.

introduzca la descripción de la imagen aquí

Convención de clave extranjera

Si la clase A está en relación con la clase B y la clase B tiene una propiedad con el mismo nombre y tipo que la clave principal de A, EF asume automáticamente que la propiedad es una clave externa.

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; }
}

En este caso, DepartmentId es una clave externa sin especificación explícita.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow