2010-06-02 19 views
10

Tengo una base de datos heredada y una relación uno-a-uno entre dos tablas. El caso es que la relación usa dos columnas, no una. ¿Hay alguna forma de decir en nhibernate que al obtener una entidad referenciada usó dos columnas en la instrucción join, no una? I tienen una estructura de tabla similarmuchas-a-una con múltiples columnas

TaskProgress

  • ProgressId
  • TaskId
  • AssignmentId
  • UserId

Tareas

  • TaskID
  • AssignmentId
  • TaskName

Cada tarea puede ser Asignado en diferentes tareas. Eso significa que la tarea única para el progreso de la tarea solo puede ser fundada por los campos AssignmentId y TaskId.

estoy tratando de utilizar esto:

References(x => x.Template) 
      .Columns() 
      .PropertyRef() 

pero no puede conseguir cómo asignar unirse en varias columnas, alguna idea?

Respuesta

5

Supongo que a partir del uso de PropertyRef en el código de ejemplo, las dos columnas no forman una clave primaria compuesta. Si ese es el caso, entonces no tiene suerte porque property-ref solo puede aceptar una propiedad. A juzgar por los comentarios en issue NH-1722, esta funcionalidad aparentemente está disponible en Hibernate pero no se ha portado a NHibernate.

Actualización: El esquema que ha agregado parece una relación de muchos a muchos con datos adicionales entre Tarea y Asignación. TaskProgress es la tabla de enlace entre Tarea y Asignación. Si TaskProgress no tenía el campo UserId adicional, entonces podría modelar esto como un simple muchos-a-muchos. Debido a que la tabla de enlace tiene datos adicionales, se vuelve un poco más complicado.

Muchos a muchos con datos adicionales usualmente modelan al crear un objeto que representa la tabla de vinculación (TaskProgress) y modelar la relación como dos relaciones de uno a muchos. Es decir, Tarea y asignación tienen relaciones uno a muchos con TaskProgress. TaskProgress tiene propiedades para Tarea, Asignación y Usuario.

+0

¿Hay alguna solución alternativa, el uso de fórmulas tal vez? – Sly

+0

Ninguna que yo sepa. ¿Pero realmente tienes una relación 1: 1 que no está relacionada con la clave principal? ¿Puedes publicar suficientes definiciones de tablas para ilustrar el problema? –

+0

He actualizado la publicación inicial para proporcionar más detalles – Sly

Cuestiones relacionadas