2014-05-19 3 views
2

DbContext의 DbSet 속성에이 대답 No FindAsync() method on IDbSet에 설명 된 메서드를 사용할 수 있습니까?DbContext 클래스의 IDbSet 속성에 대한 어댑터 패턴

편집 :

링크 대답은 어떻게 IDbSet에서 상속과 DbSet 클래스의 SearchAsync 방법에 대한 지원을 추가, 인터페이스를 구축하는 방법에 대한 설명이 포함되어 있습니다. Keith Payne이 작성한 모든 것을 이해하지만 DbContext에서 어떻게 사용할 수 있는지 알지 못합니다. 예를 들어

나는 이런 식으로 뭔가를 보이는 DbContext을했습니다 :

public class MyContext : DbContext 
{ 
    public DbSet<Customer> Customers { get; set; } 
} 

어떻게 대신 DbSet의, MyDbSet (이 질문에 설명 된 클래스입니다.) 또는 유사한 클래스를 사용할 수 있습니까?

public class MyContext : DbContext 
{ 
    public MyDbSet<Customer> Customers { get; set; } 
} 

이제 Entity Framework는 IDbSet 또는 DbSet 유형의 속성에 대한 테이블 만 생성하는 것으로 보입니다.

+0

, 훨씬 더에 ToAsyncDbSet() 확장 메서드를 추가하는 것 같이 당신은 당신의 속성을 복제 할 수 있습니다. 그러나 나는 두 번째 예가 당신이해야 할 일이라고 생각합니다. 그 일을하지 않으면 문제가 있습니까? 그렇다면 어떤 종류의 문제를 설명 할 수 있습니까? –

+0

나는 같은 생각 ...하지만 두 번째 예제는 작동하지 않습니다. Entity Framework는 DbSet 또는 IDbSet 이 아닌 속성에 대한 테이블을 생성하지 않습니다. – musium

+0

그러면 질문에, 그 꽤 관련 정보를 언급해야합니다. 당신이 질문을 할 때 당신은 항상 당신이 시도한 것을 보여 주려고 노력했습니다 (당신은 그렇게했습니다) 그리고 당신이 그것을 시도했을 때 얻은 결과 (그 부분을 떠났습니다). 또한 코멘트뿐만 아니라 질문 자체에 새로운 정보를 포함 시키십시오. 전화로 검색하는 사람들은 기본적으로 웹에 비해 더 적은 댓글을 볼 수 있으며, 몇 가지 댓글을 추가하면 마지막 답장이 '더 자세히 보시려면 클릭하십시오'화면에 표시됩니다. (여전히 좋은 질문, 나는 대답을 알고 있다면 대답했다.) –

답변

0

컨텍스트에 일반 DbSet이 있고 요청한 인터페이스를 추가하는 어댑터를 만듭니다.

public interface IAsyncDbSet<T> : IDbSet<T> 
    where T : class 
{ 
    Task<T> FindAsync(params Object[] keyValues); 
} 

public sealed class DbSetAdapter<T> : IAsyncDbSet<T>, IDbSet<T> 
    where T : class 
{ 
    private readonly DbSet<T> _innerDbSet; 

    public DbSetAdapter(DbSet<T> innerDbSet) 
    { 
     _innerDbSet = innerDbSet; 
    } 

    public Task<T> FindAsync(params object[] keyValues) 
    { 
      return _innerDbSet.FindAsync(keyValues); 
    } 

    //Here implement each method so they call _innerDbSet like I did for FindAsync 
} 

지금 당신은 당신이 그것을 필요로 할 때 DbSetAdapater을 만들고 IAsyncDbSet를 얻을 수 있습니다. EF 그들을 무시하거나 많은 IDbSet<T>

public class MyContext : DbContext 
{ 
    public DbSet<Customer> Customers { get; set; } 
    public IAsyncDbSet<Customer> CustomersAsync { get { return new DbSetAdapter<Customer>(Customers); } } 
} 
관련 문제