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?
Il y a une méthode CompositeId
.
public class EntityMap : ClassMap<Entity>
{
public EntityMap()
{
CompositeId()
.KeyProperty(x => x.Something)
.KeyReference(x => x.SomethingElse);
}
}
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();
}
}
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;
}
}
}
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