una tablas tabla relacion pasos para muchos intermedias intermedia hacer foranea crear como clave fluent-nhibernate

fluent nhibernate - tablas - Asignación de claves compuestas en NHibernate fluido



pasos para crear una tabla intermedia (4)

Soy nuevo en NHibernate con fluidez. Ahora me enfrento a un problema con la asignación de claves compuestas. ¿Alguien puede señalar la URL o la muestra, por favor?


si esta es tu primera clase

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

aquí está el segundo con una referencia sobre Entidad

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(); } }


Hay un método CompositeId .

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


Puede haber una necesidad de entidades con identificadores compuestos, entidades que mapeen a tablas que tienen claves primarias compuestas, compuestas de muchas columnas. Las columnas que componen esta clave principal generalmente son claves externas a otras tablas.

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"); } }

Para obtener más información: http://www.codeproject.com/Tips/419780/NHibernate-mappings-for-Composite-Keys-with-associ


Otra cosa a tener en cuenta es que debe anular los métodos Equals y GetHashCode para una entidad que utiliza un CompositeId. Dado el archivo de asignación de respuestas aceptadas, su entidad se vería así.

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; } } }