Compte tenu des tableaux ci-dessous, je suis en train de retourner toutes les allocations pour une de ressource donnée qui se situent entre une plage de dates à l'aide d'une requête de critères:critères NHibernate requête aide
create table Resources (
ResourceId integer,
ResourceName TEXT not null,
BusinessId TEXT not null,
OrganizationName TEXT not null,
primary key (ResourceId)
)
create table Allocations (
AllocationId integer,
StartTime DATETIME not null,
EndTime DATETIME not null,
PostingTime DATETIME,
ResourceId INTEGER,
ActivityBaseId INTEGER,
primary key (AllocationId),
unique (StartTime, EndTime, ResourceId, ActivityBaseId)
)
public Resource FetchFor(Resource resource, DateRange range) {
var allocations = _session.CreateCriteria<Resource>()
.CreateCriteria("Allocations")
.Add(Restrictions.Between("EndTime", (DateTime)range.Start, (DateTime)range.End))
.List<Allocation>();
if (allocations.Count() > 0)
resource.ReplaceAllocations(allocations);
return resource;
}
Je reçois cette exception quand je lance ceci:
failed: NHibernate.QueryException : could not resolve property: EndTime of: Domain.Model.Allocations.Allocation
Le modèle est mis en correspondance et je peux sauver une ressource et il est associé Affectations sans problème, comme je le fais pour tester cette requête Fetch. Un exemple de ligne de NHib sql: NHibernate: INSERT INTO Attributions (StartTime, EndTime, PostingTime, ResourceId, ActivityBaseId) VALEURS (@ p0, @ p1, @ p2, @ p3, @ p4); sélectionnez last_insert_rowid(); @ p0 = 1/28/2010 12:00:00 AM, @ p1 = 1/28/2010 1:00:00 AM, @ p2 = NULL, @ p3 = 1, @ p4 = 4
Le message d'exception est déroutant car NHib comprend clairement comment mapper Allocation.EndTime. S'il vous plaît:
1) aider les troubles à tirer/nettoyer la requête dans ce poste, et
2) souligner toutes les ressources préférées pour l'apprentissage des requêtes nhib, surtout s'il existe des exemples là-bas. En passant, je me rends compte que je n'utilise pas le paramètre Resource dans l'exemple illustré, car j'ai appliqué le code à partir d'un exemple sur le posting d'Ayende. Si je peux obtenir cette requête de jointure, je la transformerai en une sous-requête pour les performances.
Merci!
Berryl
=== NHib Mapping =====
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" auto-import="true" default-cascade="none" default-lazy="true">
<class xmlns="urn:nhibernate-mapping-2.2" name="Domain.Model.Allocations.Allocation, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="Allocations">
<id name="Id" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" unsaved-value="0">
<column name="AllocationId" />
<generator class="identity" />
</id>
<property name="TimeRange" type="Data.UserTypes.AllocationTimeRangeUserType, Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<column name="StartTime" not-null="true" unique-key="DomainSignature" />
<column name="EndTime" not-null="true" unique-key="DomainSignature" />
</property>
<property name="PostingTime" type="System.Nullable`1[[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="PostingTime" not-null="false" />
</property>
<many-to-one class="Domain.Model.Resources.Resource, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" foreign-key="Resource_FK" name="Resource">
<column name="ResourceId" unique-key="DomainSignature" />
</many-to-one>
<many-to-one class="Domain.Model.Activities.ActivityBase, Smack.ConstructionAdmin.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" foreign-key="ActivityBase_FK" name="Activity">
<column name="ActivityBaseId" unique-key="DomainSignature" />
</many-to-one>
Pouvez-vous montrer votre cartographie pour l'allocation? –
J'ai ajouté le mappage à la fin de la question. – Berryl