2012-09-27 2 views
0

DbContext에서 확장 메서드를 추가하려면 어떻게해야합니까?확장 메서드가있는 stackoverflow 예외

public IQueryable<T> All<T>() where T : class, new() 
    { 
     return this.All<T>(); 
    } 

내가 코드를 사용하여이를 호출 오전 : 작업의

var u = UnitOfWork.All<User>().ToList(); 

단위는 다음과 같습니다

protected DBContext UnitOfWork = new DBContext(); 

이 또한 발생을 : 이것은 스택 오버플로 예외가 발생

return this.All<T>().AsQueryable(); 

나의 등급 :

public class DBContext : DbContext, ISession 
{ 

    public DBContext() 
     : this("name=myConnString") 
    { 

    } 

    public SurventrixContext(string dbcontext) 
     : base(dbcontext) 
    { 

    } 

    #region mappings 

    private void UserMappings(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<User>().ToTable("tUsers"); 

     modelBuilder.Entity<User>().Property(x => x.UserID).HasColumnName("fU_UserID") 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 

     modelBuilder.Entity<User>().Property(x => x.FirstName).HasColumnName("fU_First_Name"); 
     modelBuilder.Entity<User>().Property(x => x.LastName).HasColumnName("fU_Last_Name"); 
     modelBuilder.Entity<User>().Property(x => x.Login).HasColumnName("fU_Login"); 
     modelBuilder.Entity<User>().Property(x => x.Password).HasColumnName("fU_Password"); 
     modelBuilder.Entity<User>().Property(x => x.Email).HasColumnName("fU_Email"); 
     modelBuilder.Entity<User>().Property(x => x.Tel).HasColumnName("fU_Tel"); 
     modelBuilder.Entity<User>().Property(x => x.CreateDate).HasColumnName("fU_CreateDate"); 
     modelBuilder.Entity<User>().Property(x => x.LastPasswordChangedDate).HasColumnName("fU_LastPasswordChangedDate"); 
     modelBuilder.Entity<User>().Property(x => x.PasswordKey).HasColumnName("fU_PasswordKey"); 
     modelBuilder.Entity<User>().Property(x => x.KeyExpiryDate).HasColumnName("fU_KeyExpiryDate"); 
     modelBuilder.Entity<User>().Property(x => x.ApiToken).HasColumnName("fU_ApiToken"); 

     modelBuilder.Entity<User>().HasKey(t => t.UserID) 
      .Property(x => x.UserID); 
    } 

    #endregion 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     UserMappings(modelBuilder); 

     base.OnModelCreating(modelBuilder); 
    } 

    public DbSet<User> User { get; set; } 

    public DbSet<ReportCommit> ReportCommit { get; set; } 

    public DbSet<Organization> Organization { get; set; } 

    public void CommitChanges() 
    { 
     this.SaveChanges(); 
    } 

    public void Delete<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression) where T : class, new() 
    { 
     this.Delete<T>(expression); 
    } 

    public void Delete<T>(T item) where T : class, new() 
    { 
     this.Delete<T>(item); 
    } 

    public void DeleteAll<T>() where T : class, new() 
    { 
     this.DeleteAll<T>(); 
    } 

    public T Single<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression) where T : class, new() 
    { 
     return this.Single<T>(expression); 
    } 

    public IQueryable<T> All<T>() where T : class, new() 
    { 
     return this.All<T>().AsQueryable(); 
    } 

    public void Add<T>(T item) where T : class, new() 
    { 
     this.Add<T>(item); 
    } 

    public void Add<T>(IEnumerable<T> items) where T : class, new() 
    { 
     foreach (var item in items) 
     { 
      this.Add<T>(item); 
     } 
    } 

    public void Update<T>(T item) where T : class, new() 
    { 
     this.Update<T>(item); 
    } 
} 

답변

2

확장 방법이 아닙니다! 방금 재귀를 호출하는 메서드를 만들었습니다.

확장 방법과 같이 보인다 :

public static IQueryable<T> All<T>(this IQuearyable<T> query) where T : class, new() 
{ 
    return query.All(); 
} 

편집 : 당신은 아마 모든 확장 방법을 찾고되지 않습니다

난 당신의 코드를 확인

합니다. 당신이 찾고 있습니다 :

public IQuerybale<T> All<T>() where T : class, new() 
{ 
    return this.Set<T>(); 
} 
+0

내 나쁜 - 내가 인터페이스 방법을'구현 어떻게'''System.Linq.IQueryable 모든 () 여기서 T : 새로운 클래스,();''''? – Haroon

+0

추가 예제를 추가했습니다. –

+0

lol ... 게시하기 전에 좀 더 깊이 파고'''Set '''그냥 테스트 해보기. 감사합니다 :) – Haroon

관련 문제