Question

J'espère que quelqu'un peut aider. Je dois développer contre cette base de données tiers et je suis un peu coincé avec leur conception merdique. , Je veux toujours utiliser NHibernate donc je vais devoir sauter à travers des cerceaux.

simplifié, il y a cette table "événement" qui a une relation d'une table "Transport". Le tableau de transport a une clé primaire composite composé du champ « ID » et « FK_EventID », celui-ci bien sûr référant au record de l'événement. Chaque point d'événement à un enregistrement distinct dans le tableau de transport, il est donc une à une relation vraiment. Les deux champs sont Guids BTW.

Tentative de carte ceci, voici comment j'ai créé les classes (en laissant d'autres champs de données pour des raisons de simplicité):

   public class FcoEvent : IFcoObject
   {
       public virtual Guid ID { get; set; }

       //public virtual Guid FK_TransportationID { get; set; } //ignore
       public virtual FcoTransportation Transportation { get; set; } 

[Serializable]
public class FcoTransportation : IFcoObject
{
    #region Members

    public virtual Guid ID { get; set; }

    public virtual Guid FK_EventID { get; set; }

Dans les fichiers de mappage je tente cette (note que je me sers beaucoup à un):

   <class name="FcoLib.FcoEvent, FcoLib" table="FCO_Event">
     <id name="ID" column="ID">
      <generator class="guid" />
     </id>
     <many-to-one name="Transportation" not-found="ignore" cascade="save-update"
                 class="FcoLib.FcoTransportation, FcoLib">
     <column name="FK_TransportationID" />
     <column name="ID" />
    </many-to-one> 

   <class name="FcoLib.FcoTransportation, FcoLib" table="FCO_Transportation">
     <composite-id>
       <key-property name="ID" />
       <key-property name="FK_EventID" />
     </composite-id>

Quand je tente de lancer, je reçois le message d'exception suivant:

NHibernate.QueryException: ne peut pas résoudre la propriété: FK_TransportationID de: FcoLib.FcoEvent

Ma première intuition était qu'il peut y avoir une erreur d'orthographe dans le nom du champ, mais cela n'a pas tenu. Alors maintenant, je suis complètement perplexe et je ne sais pas comment procéder. Toute aide est grandement appréciée. Thnx.


Mise à jour

Je pense avoir trouvé la source de l'erreur. Je ne l'avais pas encore là regardé, parce que je suppose que ce fut une erreur de cartographie, mais apparemment il est une erreur d'interrogation. Il arrive où je fais la requête:

fcoEvents = session.CreateCriteria(typeof(FcoEvent))
                    .Add(Restrictions.Eq("ID", eventId))
                    .Add(Restrictions.Eq("FK_TransportationID", transportId))
                    .List<FcoEvent>();

Je vais regarder plus loin dans cela, mais il est évident que j'ai besoin d'interroger ce d'une manière différente ...

Était-ce utile?

La solution

Me Silly. Je suis distrait par un code défectueux, pas à jour. Le point devait être en mesure de récupérer l'événement, y compris l'enfant de transport lié à l'aide de la clé primaire de l'événement et qui fonctionne simplement. En outre, il devrait être possible de récupérer la question du transport avec la clé primaire composite et qui peut être accompli avec le code ci-dessous.

    public FcoTransportation GetTransportation(Guid transportId, Guid eventId)
    {
        FcoTransportation transport;

        ISession session = Factory.OpenSession();
        ITransaction tx = session.BeginTransaction();
        try
        {
            transport = session.Get<FcoTransportation>(new FcoTransportation()
               {
                   ID = transportId,
                   FK_EventID = eventId
               });

Alors cela a été vraiment pas un problème. Je viens d'être confondu par l'ensemble des choses composite clé étrangère. J'espère ne pas perdre du temps des gens.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top