Sök…


Anmärkningar

Convention är en uppsättning standardregler för att automatiskt konfigurera en konceptuell modell baserad på domänklassdefinitioner när man arbetar med Code-First. Kod-första konventioner definieras i System.Data.Entity.ModelConfiguration.Conventions namnutrymme ( EF 5 & EF 6 ).

Primär nyckelkonvention

Som standard är en egenskap en primär nyckel om en egenskap i en klass heter "ID" (inte skiftlägeskänslig) eller klassnamnet följt av "ID". Om typen av primär nyckelegenskap är numerisk eller GUID kommer den att konfigureras som en identitetskolumn. Enkelt exempel:

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

Ta bort konventioner

Du kan ta bort någon av de konventioner som definieras i System.Data.Entity.ModelConfiguration.Conventions namnutrymme genom att åsidosätta metoden OnModelCreating .

Följande exempel tar bort PluralizingTableNameConvention.

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

Som standard skapar EF en DB-tabell med namnet på entitetsklassen tillägg av 's'. I detta exempel är Code First konfigurerad för att ignorera PluralizingTableName-konventionen, istället för dbo.Products tabellen dbo.Product tabellen skapas.

Skriv upptäckten

Som standard innehåller kod först i modellen

  1. Typer definierade som en DbSet-egenskap i sammanhangsklass.
  2. Referenstyper som ingår i entitetstyper även om de definieras i olika enheter.
  3. Deriverade klasser även om bara basklassen definieras som DbSet-egenskap

Här är ett exempel på att vi bara lägger till Company som DbSet<Company> i vår sammanhangsklass:

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

Vi kan se att alla klasser ingår i modellen

ange bildbeskrivning här

DecimalPropertyConvention

Som standard kartlägger Entity Framework decimalegenskaper till decimala (18,2) kolumner i databastabeller.

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

ange bildbeskrivning här

Vi kan ändra precisionen för decimala egenskaper:

1. Använd flytande API:

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

ange bildbeskrivning här

Endast egenskapen "Bredd" är mappad till decimal (20, 4).

2. Byt ut konventet:

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

ange bildbeskrivning här

Varje decimalegenskap mappas till decimalkolumner (10,4).

Förhållande konvention

Kod Avsluta först förhållandet mellan de två enheterna som använder navigationsegenskapen. Den här navigationsegenskapen kan vara en enkel referenstyp eller samlingstyp. Vi definierade till exempel Standardnavigationsegenskap i Studentklass och ICollection Navigationsegenskap i Standardklass. Så skapade Code First automatiskt en-till-många-förhållande mellan standarder och studenter-DB-tabellen genom att sätta in Standard_StandardId utländsk nyckelkolumn i studenttabellen.

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

Ovanstående enheter skapade följande förhållande med hjälp av utländsk nyckel Standard_StandardId.

ange bildbeskrivning här

Utländsk nyckelkonvention

Om klass A är i förhållande till klass B och klass B har egendom med samma namn och typ som den primära nyckeln för A, antar EF automatiskt att egenskapen är utländsk nyckel.

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

I detta fall är DepartmentId en utländsk nyckel utan uttrycklig specifikation.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow