수색…


비고

컨벤션은 Code-First로 작업 할 때 도메인 클래스 정의를 기반으로 개념 모델을 자동으로 구성하는 일련의 기본 규칙입니다. 코드 - 첫 번째 규칙은 System.Data.Entity.ModelConfiguration.Conventions 네임 스페이스 ( EF 5EF 6 )에 정의되어 있습니다.

기본 핵심 대회

기본적으로 속성은 클래스의 속성 이름이 "ID"(대소 문자 구분 안 함)이거나 클래스 이름 뒤에 "ID"라고 명명 된 경우 기본 키입니다. 기본 키 속성 유형이 숫자 또는 GUID이면 ID 열로 구성됩니다. 간단한 예 :

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

협약 삭제

OnModelCreating 메서드를 재정 의하여 System.Data.Entity.ModelConfiguration.Conventions 네임 스페이스에 정의 된 규칙을 제거 할 수 있습니다.

다음 예제에서는 PluralizingTableNameConvention을 제거합니다.

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

기본적으로 EF는 's'접미사가 붙은 엔티티 클래스 이름을 가진 DB 테이블을 생성합니다. 이 예제에서는 Code First가 PluralizingTableName 규칙을 무시하도록 구성되어 있으므로 dbo.Products 테이블 대신 dbo.Product 테이블이 만들어집니다.

유형 발견

기본적으로 코드 첫 번째 모델에 포함됩니다.

  1. 컨텍스트 클래스에서 DbSet 속성으로 정의 된 형식
  2. 다른 어셈블리에 정의 된 경우에도 엔터티 형식에 포함 된 참조 형식입니다.
  3. 기본 클래스 만 DbSet 속성으로 정의 된 경우에도 파생 된 클래스

다음은 우리의 컨텍스트 클래스에서 CompanyDbSet<Company> 로 추가하는 예제입니다.

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

모든 클래스가 모델에 포함되어있는 것을 볼 수 있습니다.

여기에 이미지 설명을 입력하십시오.

DecimalPropertyConvention

기본적으로 Entity Framework는 데이터베이스 테이블의 십진수 (18,2) 열로 십진 속성을 매핑합니다.

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

여기에 이미지 설명을 입력하십시오.

소수 속성의 정밀도를 변경할 수 있습니다.

1. 유창한 API 사용 :

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

여기에 이미지 설명을 입력하십시오.

"너비"속성 만 십진수 (20, 4)에 매핑됩니다.

2. 국제 대회 개최 :

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

여기에 이미지 설명을 입력하십시오.

모든 십진 속성은 10 진수 (10,4) 열로 매핑됩니다.

관계 협약

코드 탐색 속성을 사용하여 두 엔터티 간의 관계를 먼저 추론합니다. 이 탐색 특성은 간단한 참조 유형 또는 콜렉션 유형이 될 수 있습니다. 예를 들어 Student 클래스의 표준 탐색 속성과 Standard 클래스의 ICollection 탐색 속성을 정의했습니다. 따라서 Code First는 Student 테이블에 Standard_StandardId 외래 키 열을 삽입하여 Standards와 Students DB 테이블간에 일대 다 관계를 자동으로 생성했습니다.

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

위 엔티티는 Standard_StandardId 외래 키를 사용하여 다음 관계를 작성했습니다.

여기에 이미지 설명을 입력하십시오.

외래 키 협약

클래스 A가 클래스 B와 관계가 있고 클래스 B가 A의 기본 키와 동일한 이름 및 유형을 갖는 속성을 갖는 경우 EF는 해당 속성이 외래 키임을 자동으로 간주합니다.

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

이 경우 DepartmentId는 명시 적 사양이없는 외래 키입니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow