다음을 통해 공유


DbSets 정의

Code First 워크플로를 사용하여 개발할 때 데이터베이스와의 세션을 나타내고 모델의 각 형식에 대해 DbSet을 노출하는 파생 DbContext를 정의합니다. 이 항목에서는 DbSet 속성을 정의할 수 있는 다양한 방법에 대해 설명합니다.

DbSet 속성이 있는 DbContext

Code First 예제에 표시된 일반적인 사례는 모델의 엔터티 형식에 대한 공용 자동 DbSet 속성이 있는 DbContext를 사용하는 것입니다. 예시:

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }
}

Code First 모드에서 사용할 경우 블로그 및 게시물을 엔터티 형식으로 구성하고 이러한 형식에서 연결할 수 있는 다른 형식을 구성합니다. 또한 DbContext는 이러한 각 속성에 대한 setter를 자동으로 호출하여 적절한 DbSet의 인스턴스를 설정합니다.

IDbSet 속성이 있는 DbContext

모의 또는 가짜를 만드는 경우와 같이 인터페이스를 사용하여 집합 속성을 선언하는 것이 더 유용한 경우가 있습니다. 이러한 경우 DbSet 대신 IDbSet 인터페이스를 사용할 수 있습니다. 예시:

public class BloggingContext : DbContext
{
    public IDbSet<Blog> Blogs { get; set; }
    public IDbSet<Post> Posts { get; set; }
}

이 컨텍스트는 해당 집합 속성에 DbSet 클래스를 사용하는 컨텍스트와 정확히 동일한 방식으로 작동합니다.

읽기 전용 집합 속성이 있는 DbContext

DbSet 또는 IDbSet 속성에 대한 공용 setter를 노출하지 않으려면 대신 읽기 전용 속성을 만들고 집합 인스턴스를 직접 만들 수 있습니다. 예시:

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs
    {
        get { return Set<Blog>(); }
    }

    public DbSet<Post> Posts
    {
        get { return Set<Post>(); }
    }
}

DbContext는 Set 메서드에서 반환된 DbSet 인스턴스를 캐시하므로 이러한 각 속성이 호출될 때마다 동일한 인스턴스를 반환합니다.

Code First의 엔터티 형식 검색은 공용 getter 및 setter가 있는 속성과 동일한 방식으로 작동합니다.