2011-06-16 51 views
1

我有這個測試方法,我對「List」方法有問題。我想使用幾個類(所有實現IAdminDecimal)。在QueryOver,我有這樣的錯誤: 類型「T」必須是爲了用它作爲參數「T」在通用類型或方法「NHibernate.ISession.QueryOver()」NHibernate:通用方法中的QueryOver

引用類型
using (var session = sessions.OpenSession()) 
{ 
    using (var tx = session.BeginTransaction()) 
    { 
     CurrentSessionContext.Bind(session); 

     AdministrationService service = new AdministrationService(session); 
     service.List<AdminDelay>(); 

     tx.Commit(); 
    } 
} 

類:

public class AdministrationService 
{ 
    private readonly ISession _session; 

    public AdministrationService(ISession session) 
    { 
     _session = session; 
    } 

    public IList<T> List<T>() where T : IAdminDecimal 
    { 
     var res = _session.QueryOver<T>().List<T>(); 
     return res; 
    } 
} 


public interface IAdminDecimal 
{ 
    int Id { get; set; } 
    int Code { get; set; } 
    decimal Value { get; set; } 
    bool IsDeleted { get; set; } 
} 

public class AdminVAT : IAdminDecimal 
{ 
    public virtual int Id { get; set; } 
    public virtual int Code { get; set; } 
    public virtual decimal Value { get; set; } 
    public virtual bool IsDeleted { get; set; } 
} 

回答

2

嘗試:

public IList<T> List<T>() where T : class, IAdminDecimal 
+0

我試過,但在「列表」的測試方法,我有這樣的錯誤:類型「AdminDelay」不能被用作在通用類型或方法「AdministrationService.List 類型參數「T」 ()」。 沒有從'AdminDelay'到'IAdminDecimal'的隱式引用轉換。 – 2011-06-16 08:22:43

+0

這表明AdminDelay沒有實現IAdminDecimal。你有AdminDelay類型的代碼嗎? – devdigital 2011-06-16 08:41:43

+0

你是對的,這是我的錯誤「AdminDelay」不暗示這個interfance,但「AdminVAT」是的,這是工作:)謝謝。 – 2011-06-16 08:46:30