2010-08-09 11 views
7

Estoy tratando de obtener una sola propiedad de una tabla unida donde una PK no perteneciente a mi tabla principal se une a la PK de la tabla externa. A continuación se muestra un simplificada ejemplo de lo que estoy tratando de lograr (no quiero hacer referencia a la entidad extranjera):Combinación fluida de NHibernate no usando la clave principal

Tablas:

CREATE TABLE Status 
(
    Id int, 
    Body text, 
    CategoryId int 
) 

CREATE TABLE Category 
(
    Id int, 
    Name text 
) 

SQL para generar:

SELECT Id, Body, CategoryId, Category.Name AS CategoryName 
FROM Status 
LEFT JOIN Category ON Category.Id = Status.CategoryId 

Estoy tratando de asignar la unión como esta en el mapa de estado, pero que parece unirse a las dos claves primarias (donde Status.Id = Category.Id):

Join("Category" m => 
{ 
    m.Optional(); 
    m.KeyColumn("CategoryId"); 
    m.Map(x => x.CategoryName, "Name"); 
}); 
+0

No puedo encontrar la manera de hacer esto tampoco. Si está buscando una solución alternativa, es posible que pueda asignar a una vista, que es lo que suelo hacer para este tipo de cosas. – cbp

+0

Eso es lo que estoy usando actualmente como solución, me alegra no ser el único :) – jwarzech

Respuesta

4

Por lo que yo sé que la única forma de evitar esto es utilizando Fluido para asignar a una vista a medida que actualmente está obra. Join() siempre se correlacionará con la clave principal de la tabla primaria. El método KeyColumn especifica la columna clave solo para la tabla secundaria, que en su caso es la tabla Categoría.

Para lograr el SQL deseado utilizando su versión simplificada anterior, probablemente desee utilizar References para definir una relación de varios a uno entre el estado y la categoría.

Cuestiones relacionadas