web-dev-qa-db-fra.com

Cartographie des touches composites dans NHibernate fluide

Je suis nouveau à Nibernate fluide. Maintenant, je fais face à un problème avec la cartographie des clés composites. Quelqu'un peut-il signaler l'URL ou l'échantillon s'il vous plaît?

40
pang

Il y a une méthode CompositeId.

public class EntityMap : ClassMap<Entity>
{
  public EntityMap()
  {
      CompositeId()
      .KeyProperty(x => x.Something)
      .KeyReference(x => x.SomethingElse);
  }
}
50
James Gregory

si c'est votre première classe

public class EntityMap : ClassMap<Entity>
{
  public EntityMap()
  {
    UseCompositeId()
      .WithKeyProperty(x => x.Something)
      .WithReferenceProperty(x => x.SomethingElse);
  }
}

voici la seconde avec une référence sur l'entité

public class SecondEntityMap : ClassMap<SecondEntity>
    {
      public SecondEntityMap()
      {
        Id(x => x.Id);

        ....

        References<Entity>(x => x.EntityProperty)
          .WithColumns("Something", "SomethingElse")
          .LazyLoad()
          .Cascade.None()
          .NotFound.Ignore()
          .FetchType.Join();

      }
    }
5
Lars Hildebrandt

Une autre chose à noter est que vous devez remplacer les méthodes d'équivalence et de gethashscode pour une entité utilisant un compositeid. Compte tenu du fichier de mappage de réponses accepté, votre entité ressemblerait à ceci.

public class Entity
{
   public virtual int Something {get; set;}
   public virtual AnotherEntity SomethingElse {get; set;}


   public override bool Equals(object obj)
    {
        var other = obj as Entity;

        if (ReferenceEquals(null, other)) return false;
        if (ReferenceEquals(this, other)) return true;
        return other.SomethingElse == SomethingElse && other.Something == Something;
    }

    public override int GetHashCode()
    {
        unchecked
        {
            return (SomethingElse.GetHashCode()*397) ^ Something;
        }
    }

}
4
Kyle Mountney

Il peut être nécessaire d'avoir besoin d'entités avec des identificateurs composites, des entités qui ont une carte aux tables qui ont des clés primaires composites, composées de nombreuses colonnes. Les colonnes qui composent cette clé primaire sont généralement des clés étrangères à une autre tables.

public class UserMap : ClassMap<User>
{      
   public UserMap()
   {
        Table("User");

        Id(x => x.Id).Column("ID");

        CompositeId()
          .KeyProperty(x => x.Id, "ID")
          .KeyReference(x => x.User, "USER_ID");

        Map(x => x.Name).Column("NAME");               

        References(x => x.Company).Column("COMPANY_ID").ForeignKey("ID");
    }
}

Pour plus de référence: http://www.codeproject.com/tips/419780/nhibernate-mappings-for-composite-kesys-with-associ

1
Deepak