使用nhibernate作为ORM
试图获得一个实体
var users = GetUsersData(repository);
return users.Where(f => f.Id == id).FirstOrDefault();//there is an exception
异常:
类型为'System.Linq.EnumerableQuery
1[Entity]' cannot be converted to type 'System.Linq.IQueryable
的对象1 [System.Object []]'。
但当我这样做的时候:
var users = GetUsersData(repository);
return users.Where(f => f.Id == id).ToArray().FirstOrDefault();
运行正常。 指出我,出了什么问题?
在GetUsersData
我做:
private static IQueryable<User> GetUsersData(IUserRepository repository)
{
return repo.GetAll().Select(user => new User
{
Id = user.Id,
Phones = user.Phones.Select(s => new Phone() { Number = s.Number }),
...
}).AsQueryable();
答案 0 :(得分:2)
.AsQueryable()
会将来自NH的给定IQueryable不必要地包装到一个新的Queryable中,但由于NH默认使用对象数组作为结果并在以后转换它将失败。
另外,将用户选择为另一个用户将阻止更改,并且无需复制。
repo.GetAll().Where(f => f.Id == id).FirstOrDefault(); should be enough
甚至更好,因为sessioncache使用
var user = session.Get<User>(id);
if (user == null)
// user with given Id does not exist