请查看以下测试:
[TestMethod]
public void CanRead()
{
using (ISession session = OpenSession())
{
var criteria = session.CreateCriteria(typeof(Action));
var result = criteria.List<Action>();
Assert.IsTrue(result.Count > 0);
}
}
[TestMethod]
public void CanReadWithLinq()
{
using (ISession session = OpenSession())
{
IEnumerable<Action> actionQuery = from action in session.Linq<Action>()
where action.CreatedOn < DateTime.Now
select action;
List<Action> actions = actionQuery.ToList();
Assert.IsNotNull(actions);
Assert.IsTrue(actions.Count > 0);
}
}首先运行,所以我假设映射是正确的(在NHibernate.Attributes类中使用Action )。测试二除例外外均失败:
System.InvalidOperationException:无法找到名为: BOM.Domain.Action的实体。
事实证明,在where条件下使用实体的每个linq表达式都会失败,只有此异常。移除那个地方将使它通过,但这不是我想要达到的,当然。我遗漏了什么?为什么会有这样的例外?
更新:
我创建了一个单独的项目如下。
域对象:
namespace Domain
{
public class TestEntity
{
public Guid Id { get; set; }
public DateTime CreatedOn { get; set; }
}
}制图文件:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class entity-name="T_TestEntity" name="Domain.TestEntity, Domain" lazy="false">
<id name="Id" />
<property name="CreatedOn" column="CreatedOn" />
</class>
</hibernate-mapping>单元测试初始化创建一个SQL CE数据库文件,该文件看起来很好。测试是非常相似的,而且我已经得到了与前面相同的行为:使用ICriteria进行的抓取很好,使用Linq的抓取在添加与域对象相关的条件之前工作得很好。与前面的InvalidOperationException相同,这里的堆栈跟踪:
测试方法Tests.ReadTests.CanReadWithLinq抛出异常: System.InvalidOperationException:未能找到名为: Domain.TestEntity的实体。在NHibernate.Linq.Util.CriteriaUtil.GetRootType(CriteriaImpl标准)在NHibernate.Linq.Util.CriteriaUtil.GetRootType(ICriteria标准)在NHibernate.Linq.Visitors.MemberNameVisitor.IsRootEntity(EntityExpression博览会)在NHibernate.Linq.Visitors.MemberNameVisitor.VisitEntity(EntityExpression博览会)在NHibernate.Linq.Visitors.NHibernateExpressionVisitor.Visit(Expression exp)在NHibernate.Linq.Visitors.NHibernateExpressionVisitor.VisitPropertyAccess(PropertyAccessExpression博览会(NHibernate.Linq.Visitors.NHibernateExpressionVisitor.VisitPropertyAccess(PropertyAccessExpression exp)在NHibernate.Linq.Visitors.MemberNameVisitor.VisitPropertyAccess(PropertyAccessExpression博览会(NHibernate.Linq.Visitors.MemberNameVisitor.VisitPropertyAccess(PropertyAccessExpression exp)在NHibernate.Linq.Visitors。NHibernate.Linq.Visitors.MemberNameVisitor.GetMemberName(ICriteria rootCriteria的NHibernateExpressionVisitor.Visit( exp)( NHibernate.Linq.Visitors.BinaryCriterionVisitor.VisitPropertyAccess(PropertyAccessExpression expr)在NHibernate.Linq.Visitors.NHibernateExpressionVisitor.Visit(Expression exp)在NHibernate.Linq.Visitors.BinaryCriterionVisitor.GetBinaryCriteria(ICriteria rootCriteria,ISession会话,BinaryExpression expr,ComparePropToValue comparePropToValue,ComparePropToProp comparePropToProp,CompareValueToCriteria compareValueToCriteria,在NHibernate.Linq.Visitors.WhereArgumentsVisitor.VisitBinaryCriterionExpression(BinaryExpression ),在NHibernate.Linq.Visitors.WhereArgumentsVisitor.VisitBinary(BinaryExpression ),在NHibernate.Linq.Visitors.ExpressionVisitor.Visit(Expression ),在NHibernate.Linq.Visitors.NHibernateExpressionVisitor.Visit(Expression ),在NHibernate.Linq.Visitors.ExpressionVisitor.VisitLambda(LambdaExpression,lambda),NHibernate.Linq.Visitors.ExpressionVisitor.Visit(Expression ),NHibernate.Linq.Visitors.NHibernateExpressionVisitor.Visit(Expression ),NHibernate )( .Linq.Visitors.WhereArgumentsVisitor.VisitUnary(UnaryExpression exp)在NHibernate.Linq.Visitors.ExpressionVisitor.Visit(Expression exp)在NHibernate.Linq.Visitors.NHibernateExpressionVisitor.Visit(Expression exp)在NHibernate.Linq.Visitors.WhereArgumentsVisitor.GetCriterion(ICriteria rootCriteria,在NHibernate.Linq.Visitors.RootVisitor.HandleWhereCall(MethodCallExpression call)在NHibernate.Linq.Visitors.RootVisitor.VisitMethodCall(MethodCallExpression expr)在NHibernate.Linq.Visitors.ExpressionVisitor.Visit(Expression exp)在NHibernate.Linq.Visitors.NHibernateExpressionVisitor.Visit(Expression exp)在NHibernate.Linq.Visitors.NHibernateQueryTranslator.Translate(Expression表达式中,(在NHibernate.Linq.NHibernateQueryProvider.TranslateExpression(Expression表达式)在NHibernate.Linq.NHibernateQueryProvider.Execute(Expression表达式)在NHibernate.Linq.Query
1.GetEnumerator() at System.Linq.Enumerable.FirstOrDefault<TSource>(IEnumerable1源)在Tests.ReadTests.CanReadWithLinq()在ReadTests.cs中:第52行.
发布于 2009-11-19 07:54:57
我认为这是XML映射文件的一个问题。您能否检查您的文件Action.hbm.xml,执行"F4“并将”构建操作“设置为”嵌入式资源“。
https://stackoverflow.com/questions/1755956
复制相似问题