Soy nuevo en NHibernate con fluidez. Ahora me enfrento a un problema con la asignación de claves compuestas. ¿Alguien puede indicar la URL o la muestra, por favor?Asignación de claves compuestas en Fluido NHibernate
Respuesta
Hay un método CompositeId
.
public class EntityMap : ClassMap<Entity>
{
public EntityMap()
{
CompositeId()
.KeyProperty(x => x.Something)
.KeyReference(x => x.SomethingElse);
}
}
Tenga en cuenta que en las nuevas versiones de NHibernate UseCompositeId se reemplaza con CompositeId, y WithKeyProperty es solo KeyProperty –
@Rob Walker: También WithReferenceProperty se ha convertido en KeyReference – Mulki
¿Cuál es la diferencia entre KeyProperty y KeyReference en este caso? –
si esta es su primera clase
public class EntityMap : ClassMap<Entity>
{
public EntityMap()
{
UseCompositeId()
.WithKeyProperty(x => x.Something)
.WithReferenceProperty(x => x.SomethingElse);
}
}
aquí es el segundo con una referencia en la 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();
}
}
Puede haber una necesidad de entidades con identificadores compuestos, entidades que se asignan 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 mayor referencia: http://www.codeproject.com/Tips/419780/NHibernate-mappings-for-Composite-Keys-with-associ
"Las columnas que componen esta clave principal suelen ser claves foráneas para otras tablas". No, por lo general. En todo caso, ayudan a identificar una entidad de manera única donde una columna no puede hacerlo por sí misma. – user919426
Otra cosa a destacar es que es necesario sustituir los métodos equals y GetHashCode para una entidad utilizando 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;
}
}
}
- 1. Fluido NHibernate HasManyToMany() Asignación
- 2. Asignación a tipo Serializable en NHibernate fluido
- 3. Asignación de herencia con NHibernate fluido
- 4. claves compuestas en sqlalchemy
- 5. Fluido NHibernate JoinedSubClass obsoleto
- 6. Doctrina y claves únicas compuestas
- 7. Fluido NHibernate, trabajando con interfaces
- 8. oscuro de error NHibernate/Fluido NHibernate
- 9. NHibernate Fluido vs. Atributos
- 10. Fluido NHibernate Dónde Cláusula
- 11. Fluido NHibernate - actualización innecesaria
- 12. Fluido NHibernate Visual Designer
- 13. Relaciones en claves compuestas usando sqlalchemy
- 14. Plantilla T4 para NHibernate? - No Fluido NHibernate
- 15. Fluido NHibernate, mapeo de subclases unidos
- 16. Proyección en varios cuadros con Fluido NHibernate
- 17. Fluido NHibernate + bases de datos múltiples
- 18. Fluido NHibernate - SessionSource y PersistenceSpecification
- 19. Fluido NHibernate CheckProperty y Fechas
- 20. Caché NHibernate fluido con automatización
- 21. Fluido NHibernate QueryOver SQL equivalente
- 22. Fluido NHibernate genera columnas adicionales
- 23. Fluido nHibernate Slow Startup Time
- 24. Django o similar para claves primarias compuestas
- 25. ¿Usar claves compuestas? ¿O siempre usas claves sustitutivas?
- 26. Claves compuestas MySql y valores nulos
- 27. Fluido NHibernate y uno a uno
- 28. Fluido NHibernate Autorreferenciado a muchos a muchos
- 29. Fetch.Join() no funciona en Fluido NHibernate
- 30. Cómo usar las teclas de cadena en (fluido) NHibernate
encontraste ejemplo más detallado aquí http://devlicio.us/blogs/derik_whittaker/archive/2009/01/16/using-fluentnhibernate-to-map-composite-keys-for-a-table .aspx –