83

Entity Framework 데이터 컨텍스트를 타사 플러그인에 노출해야합니다. 이 플러그인은 데이터를 가져오고 삽입, 업데이트 또는 삭제 또는 다른 데이터베이스 수정 명령을 내 보내지 않도록 허용하기위한 것입니다. 따라서 어떻게 데이터 컨텍스트 또는 엔티티를 읽기 전용으로 만들 수 있습니까?Entity Framework 데이터 컨텍스트를 읽기 전용으로 만드는 방법

+3

데이터베이스에 대한 쓰기 권한이없는 사용자에게 컨텍스트를 제공하십시오. – vcsjones

+0

감사합니다. 메신저 SQLite 데이터베이스를 사용하여. 방금 연결 문자열 옵션을 통해 읽기 전용 모드로 열 수 있다는 것을 알았습니다. – Harindaka

+0

그들에게'DbContext'를주지 말고, 그들에게'IQueryable' 또는 몇 가지를주지 마십시오. –

답변

133

읽기 전용 사용자와 연결하는 것 외에도 DbContext에 할 수있는 몇 가지 작업이 있습니다.

public class MyReadOnlyContext : DbContext 
{ 
    // Use ReadOnlyConnectionString from App/Web.config 
    public MyContext() 
     : base("Name=ReadOnlyConnectionString") 
    { 
    } 

    // Don't expose Add(), Remove(), etc. 
    public DbQuery<Customer> Customers 
    { 
     get 
     { 
      // Don't track changes to query results 
      return Set<Customer>().AsNoTracking(); 
     } 
    } 

    public override int SaveChanges() 
    { 
     // Throw if they try to call this 
     throw new InvalidOperationException("This context is read-only."); 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     // Need this since there is no DbSet<Customer> property 
     modelBuilder.Entity<Customer>(); 
    } 
} 
+0

당신은 '내부 사람'이라는 것이 분명했습니다. - 이것은 '읽기 전용'연결보다 훨씬 흥미 롭습니다. – NSGaga

+3

'AsNoTracking() '을 사용하면 지연로드를 사용할 수 없게됩니다. –

+0

@ TomPažourek 그게 사실인지 나는 모른다 ... 나는 EF가 여전히 게으른 로딩 프록시를 생성한다고 생각하지만, 신원 확인은 조금 이상하게 느껴질 수있다. – bricelam

관련 문제