首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate和:“找不到名为.”的实体

NHibernate和:“找不到名为.”的实体
EN

Stack Overflow用户
提问于 2009-11-18 13:27:00
回答 1查看 1.5K关注 0票数 0

请查看以下测试:

代码语言:javascript
复制
[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表达式都会失败,只有此异常。移除那个地方将使它通过,但这不是我想要达到的,当然。我遗漏了什么?为什么会有这样的例外?

更新:

我创建了一个单独的项目如下。

域对象:

代码语言:javascript
复制
namespace Domain
{
    public class TestEntity
    {
        public Guid Id { get; set; }
        public DateTime CreatedOn { get; set; }
    }
}

制图文件:

代码语言:javascript
复制
<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.Query1.GetEnumerator() at System.Linq.Enumerable.FirstOrDefault<TSource>(IEnumerable1源)在Tests.ReadTests.CanReadWithLinq()在ReadTests.cs中:第52行.

EN

回答 1

Stack Overflow用户

发布于 2009-11-19 07:54:57

我认为这是XML映射文件的一个问题。您能否检查您的文件Action.hbm.xml,执行"F4“并将”构建操作“设置为”嵌入式资源“。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1755956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档