Nhibernate抛出类型为';System.Linq.EnumerableQuery`1[实体]';无法
本文关键字:无法 实体 EnumerableQuery System 类型 Nhibernate Linq | 更新日期: 2023-09-27 18:22:16
使用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();
.AsQueryable()
将不必要地将给定的IQueryable从NH包装到一个新的Queryable中,但由于NH默认情况下将使用对象数组作为结果,并在稍后对其进行转换,因此它将无法进行强制转换。
此外,将用户选择为另一个用户将阻止更改跟踪,并且是不必要的复制。
repo.GetAll().Where(f => f.Id == id).FirstOrDefault(); should be enough
或者由于会话缓存使用而变得更好
var user = session.Get<User>(id);
if (user == null)
// user with given Id does not exist