Entity Framework
코드 첫 번째 규칙
수색…
비고
컨벤션은 Code-First로 작업 할 때 도메인 클래스 정의를 기반으로 개념 모델을 자동으로 구성하는 일련의 기본 규칙입니다. 코드 - 첫 번째 규칙은 System.Data.Entity.ModelConfiguration.Conventions 네임 스페이스 ( EF 5 및 EF 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
테이블이 만들어집니다.
유형 발견
기본적으로 코드 첫 번째 모델에 포함됩니다.
- 컨텍스트 클래스에서 DbSet 속성으로 정의 된 형식
- 다른 어셈블리에 정의 된 경우에도 엔터티 형식에 포함 된 참조 형식입니다.
- 기본 클래스 만 DbSet 속성으로 정의 된 경우에도 파생 된 클래스
다음은 우리의 컨텍스트 클래스에서 Company
를 DbSet<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는 명시 적 사양이없는 외래 키입니다.