Estoy trabajando en la creación de una aplicación POC sencilla utilizando Fluent NHibernate para intentar demostrar que puede hacer todo lo que hace con nuestra herramienta actual de acceso a datos y mucho más. Uno de los casos marginales que preocupa a mi jefe es la posibilidad de acceder a múltiples esquemas dentro de la misma base de datos en una consulta. Hasta ahora he podido extraer datos de las tablas en ambos esquemas siempre que la consulta solo toque un esquema a la vez. Si trato de ejecutar un comando que unirá las tablas de ambos esquemas, explotará.Únase entre dos campos no clave
Basándome en los mensajes de error que estoy viendo, no creo que el problema sea unir esquemas, sino más bien el hecho de que los dos campos en los que necesito unirme a las tablas no son clave campos. La estructura de los dos mesa es algo como esto:
Customer (in schema 1) -------- int CustomerId (Primary Key) string Name ...other fields Order (in schema 2) -------- int OrderId (primary key) string CustomerName ...other fields
mediante sql directamente me pueda unir en los campos Nombre/CustomerName y obtener los datos de las dos tablas. Sin embargo, al usar NHibernate sigo obteniendo una "System.FormatException: la cadena de entrada no estaba en el formato correcto" al intentar extraer datos de la tabla de pedidos e incluir datos de la tabla de clientes. Esto me lleva a creer que NHibernate está intentando unirse al campo CustomerName y al campo CustomerId.
Sé cómo decirles que utilicen el campo CustomerName en mi asignación de pedidos, pero no puedo encontrar la manera de indicarme que me unan en el campo Nombre de la tabla de clientes.
Mis Asignaciones de ser algo como esto:
public class CustomerMap : ClassMap<Customer>
{
public CustomerMap()
{
Id(x => x.Id)
.Column("CustomerId");
Map(x => x.Name);
}
}
public class OrderMap : ClassMap<Order>
{
public OrderMap()
{
Schema("schema2");
Id(x => x.Id)
.Column("OrderID");
Map(x => x.CustomerName)
.Column("CustomerName");
References<Customer>(x => x.Customer, "CustomerName");
}
}
El SQL que escribiría para obtener los resultados que quiero sería algo así como:
select o.OrderId, o.CustomerName, c.CustomerId
from order o
inner join customer c on c.Name = o.CustomerName
Es esto posible? ¿Hay alguna manera diferente/mejor de hacer esto?
Gracias! Eso lo hizo. Intenté tanto 'Column' como 'PropertyRef' individualmente, pero no pensé en probarlos juntos por algún motivo. – Hamman359
Genial, esto es exactamente lo que estaba buscando. También puede beneficiarse de un tipado fuerte con su parámetro PropertyRef mediante el uso de lambdas, es decir, PropertyRef (x => x.Name). Esto significa que no se romperá si refactoriza su clase de Cliente. – nukefusion
¡Eso ayudó incluso con Uno para muchos! :) – Turowicz