nhibernate,无法解析属性 QueryOver 只有一张表

标签 nhibernate domain-driven-design ddd-repositories

我发现了十几个与我类似的问题,但没有一个为我的问题提供了解决方案。

先感谢您

好的,

我有这个类

public class User : IEntity
    {
        private int id;
        public virtual int Id { get { return id; } }


        private string email;

        public virtual string Email
        {
            get { return email; }
            //private set { email = value; }
        }

        private string password;

        public virtual string Password
        {
            get { return password; }
            //private set { password = value; }
        }

        private bool isActive;

        public virtual bool IsActive
        {
            get { return isActive; }
            //private set { isActive = value; }
        }

        private bool isRegistered;

        public virtual bool IsRegistered
        {
            get { return isRegistered; }
            //private set { isRegistered = value; }
        }

        private bool hasRequestedApplication;

        public virtual bool HasRequestedApplication
        {
            get { return hasRequestedApplication; }
            //private set { hasRequestedApplication = value; }
        }


        private ContactInfo contactInformation;

        public virtual ContactInfo ContactInformation
        {
            get { return contactInformation; }
            //private set { contactInformation = value; }
        }



        public User(string email)
        {
            this.email = email;
        }

        public User(string email, string password):this(email)
        {
            this.password = password;
        }

        public User()
        { }
}

这是映射....
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Domain"
                 namespace="Domain.User" default-access="field">

  <class name="User" table="[User]">

    <id name="id" column="UserID">
      <generator class="identity" />
    </id>
    <property name="email" column="Email" not-null="true"></property>
    <property name="password" column="HashedPassword" not-null="false"></property>
    <property name="isRegistered" column="IsRegistered" not-null="true"></property>
    <property name="isActive" column="IsActive" not-null="true"></property>
    <property name="hasRequestedApplication" column="HasRequestedApplication" not-null="true"></property>

    <one-to-one name="contactInformation" class="Domain.User.ContactInfo"/>
  </class>
</hibernate-mapping>

这就是我的称呼
 public class UserRepository: IUserRepository
    {
        Func<ISession> session;

        public UserRepository(Func<ISession> _session)
        {
            session = _session;
        }

        [Transaction]
        public User FindByEmail(string emailAddress)
        {
            using (var tx = session())
            {
                return tx.QueryOver<User>().Where(u => u.Email == emailAddress).SingleOrDefault();
            }
        }
}

错误...
{“无法解析属性:电子邮件:Domain.User.User”}

堆栈跟踪...

在 NHibernate.Persister.Entity.AbstractPropertyMapping.ToType(String propertyName)
在 NHibernate.Persister.Entity.AbstractEntityPersister.GetSubclassPropertyTableNumber(String propertyPath)
在 NHibernate.Persister.Entity.BasicEntityPropertyMapping.ToColumns(String alias, String propertyName)
在 NHibernate.Persister.Entity.AbstractEntityPersister.ToColumns(String alias, String propertyName)
在 NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetColumns(ICriteria subcriteria, String propertyName)
在 NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetColumnsUsingProjection(ICriteria subcriteria, String propertyName)
在 NHibernate.Criterion.CriterionUtil.GetColumnNamesUsingPropertyName(ICriteriaQuery 标准查询,ICriteria 标准,字符串属性名称,对象值,ICriterion 标准)
在 NHibernate.Criterion.SimpleExpression.ToSqlString(ICriteria 标准,ICriteriaQuery 标准查询,IDictionary 2 enabledFilters) at NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetWhereCondition(IDictionary 2 enabledFilters)
在 NHibernate.Loader.Criteria.CriteriaJoinWalker..ctor(IOuterJoinLoadable 持久化器、CriteriaQueryTranslator 转换器、ISessionFactoryImplementor 工厂、ICriteria 标准、字符串 rootEntityName、IDictionary 2 enabledFilters) at NHibernate.Loader.Criteria.CriteriaLoader..ctor(IOuterJoinLoadable persister, ISessionFactoryImplementor factory, CriteriaImpl rootCriteria, String rootEntityName, IDictionary 2 enabledFilters)
在 NHibernate.Impl.SessionImpl.List(CriteriaImpl 标准,IList 结果)
在 NHibernate.Impl.CriteriaImpl.List(IList 结果)
在 NHibernate.Impl.CriteriaImpl.UniqueResultT
在 NHibernate.Criterion.QueryOver 1.SingleOrDefault() at NHibernate.Criterion.QueryOver 1.NHibernate.IQueryOver.SingleOrDefault()
在 DataObjects.NHibernate.UserRepository.FindByEmail(String emailAddress) 在 E:\Projects\DataObjects.NHibernate\UserRepository.cs:line 26
在 CaSTLe.Proxies.Invocations.IUserRepository_FindByEmail.InvokeMethodOnTarget()
在 CaSTLe.DynamicProxy.AbstractInvocation.Proceed()
在 CaSTLe.Facilities.AutoTx.TransactionInterceptor.SynchronizedCase(IInvocation 调用,ITransaction 事务)在 d:\BuildAgent-03\work\9844bdf039249947\src\CaSTLe.Facilities.AutoTx\TransactionInterceptor.cs:line 137

编辑:

好的。一定程度上解决了。我在映射中将所有属性和组件名称更改为大写。
代替...
<property name="email" column="emailaddress" />

将其设置为...
<property name="Email" column="emailaddress" />

它有效。现在,这是否可以保证 NHibernate 通过字段填充/读取我的属性?但愿如此。

最佳答案

这应该会有所帮助:将设置更改为不同的 get 和 set

<hibernate-mapping ... default-access="field.camelcase">

并映射属性:
<property name="Email" column="emailaddress" />

NHibernate 将使用字段进行设置,使用属性进行获取。这个QueryOver:
return tx.QueryOver<User>()    
  .Where(u => u.Email == emailAddress)  
  .SingleOrDefault();

...现在可以工作

关于nhibernate,无法解析属性 QueryOver 只有一张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13943908/

相关文章:

domain-driven-design - 如何处理域模型更新和存储事件的不变性?

domain-driven-design - DDD 中的工厂、服务、存储库

java - 如何将 Repository 与 DDD 和 Spring 集成

mysql - 流畅的 NHibernate 与 MySQL、Mono 和 ASP MVC 3

oracle - 从数据库返回时,字符串会附加特殊字符

asp.net-mvc - 哪种数据框架更适合 ASP.NET MVC 站点 - LINQ to SQL 或 NHibernate

java - 我应该在 'user of given id not exist' 时抛出 IllegalArgumentException 吗?

nhibernate - IndexOutOfRangeException 深入 NHibernate

java - 如何使用 CQRS 进行 BDD?

model-view-controller - 如何解耦存储库和实体