2011-06-16 52 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