在我的Base repo中,我有这个代码可以正常工作:
abstract class BaseRepo <T> : IRepo <T>
{
private ISession _session;
public Entity GetById<Entity>(int Id)
{
return _session.Get<Entity>(Id);
}
// other methods
}
我想添加另一个方法来返回对象(实体)的所有行。我想做点什么:
public IList<Entity> GetAll<Entity>()
{
return _session.CreateCriteria<Entity>().List<Entity>;
}
但我收到错误说:
The type 'Entity' must be a reference type in order to use it as parameter 'T' in the generic type or method 'NHibernate.ISession.CreateCriteria<T>()'
这是我的DAL设计供参考:Should I use generics to simplify my DAL?
答案 0 :(得分:4)
CreateCriteria
方法要求您使用引用类型 - 在DAL方法上添加约束:
public IList<Entity> GetAll<Entity>()
where Entity : class
{
return _session.CreateCriteria<Entity>().List<Entity>();
}
这自然意味着您传递给此方法的任何Entity
类型都必须是引用类型。
我还建议命名你的泛型类型参数TEntity
- Entity
单独有点令人困惑(因为它是完美的名字,比如实体基类)。