Ich habe ein Dutzend von Frage ähnlich zu mir gefunden, aber keine von ihnen bot eine Lösung für mein Problem.Nhibernate, konnte Eigenschaft nicht auflösen QueryOver nur eine Tabelle
Vielen Dank im Voraus
Ok,
ich diese Klasse
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()
{ }
}
dies ist die Abbildung ....
<?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>
haben und das ist, wie ich bin Rufen Sie es an
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();
}
}
}
Fehler ... { "konnte nicht Eigentum beheben: E-Mail von: Domain.User.User"}
Stacktrace ...
bei NHibernate.Persister.Entity.AbstractPropertyMapping.ToType (String propertyname) bei NHibernate.Persister.Entity.AbstractEntityPersister.GetSubclassPropertyTableNumber (String PropertyPath) bei NHibernate.Persister.Entity.BasicEntityPropertyMapping.ToColumns (String alias, String propertyname) bei NHibernate.Persister.Entity.AbstractEntityPersister.ToColumns (String alias, String propertyName) um NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetColumns (ICriteria Subkriterien, String property) bei NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetColumnsUsingProjection (ICriteria Subkriterien, String property) bei NHibernate.Criterion.CriterionUtil.GetColumnNamesUsingPropertyName (ICriteriaQuery criteriaQuery, ICriteria Kriterien, String propertyname, Objektwert, ICriterion critertion) bei NHibernate.Criterion.SimpleExpression.ToSqlString (ICriteria Kriterien ICriteriaQuery criteriaQuery, IDictionary 2 enabledFilters) at NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetWhereCondition(IDictionary
2 enabledFilters) bei NHibernate.Loader.Criteria.CriteriaJoinWalker..ctor (IOuterJoinLoadable persister, CriteriaQueryTranslator translator, ISessionFactoryImplementor Factory, ICriteria-Kriterien, String rootEntityName, IDictionary 2 enabledFilters) at NHibernate.Loader.Criteria.CriteriaLoader..ctor(IOuterJoinLoadable persister, ISessionFactoryImplementor factory, CriteriaImpl rootCriteria, String rootEntityName, IDictionary
2 enabledFilters) bei NHibe rnate.Impl.SessionImpl.List (CriteriaImpl Kriterien, IList Ergebnisse) bei NHibernate.Impl.CriteriaImpl.List (IList Treffer) bei NHibernate.Impl.CriteriaImpl.UniqueResultT bei NHibernate.Criterion.QueryOver 1.SingleOrDefault() at NHibernate.Criterion.QueryOver
1.NHibernate.IQueryOver. SingleOrDefault() bei DataObjects.NHibernate.UserRepository.FindByEmail (String emailaddress) in E: \ Projects \ DataObjects.NHibernate \ UserRepository.cs: Zeile 26 bei Castle.Proxies.Invocations.IUserRepository_FindByEmail.InvokeMethodOnTarget() bei Castle.DynamicProxy .AbstractInvocation.Proceed() bei Castle.Facilities.AutoTx.TransactionInterceptor.SynchronizedCase (IInvocation-Aufruf, ITransaction-Transaktion) in d: \ BuildAgent-03 \ work \ 9844bdf039249947 \ src \ Castle.Facilities.AutoTx \ TransactionInterceptor.cs: Zeile 137
EDIT:
OK. Gelöst in gewissem Maße. Ich habe alle meine Eigenschaften und Komponenten in Großbuchstaben in meinem Mapping geändert. Statt ...
<property name="email" column="emailaddress" />
Set es zu ...
<property name="Email" column="emailaddress" />
und es funktioniert. Ist das nun eine Garantie, dass NHibernate meine Eigenschaften über die Felder auffüllt/liest? Ich hoffe es.
Hallo Radim, genau das habe ich gemacht. Es funktioniert gut. Vielen Dank –