Estoy tratando de reemplazar un desagradable SQL hit LINQ 2 con algunas consultas aptas para mejorar el rendimiento. Al hacerlo, tengo que tejer varios objetos diferentes para crear el objeto grande requerido para contener toda la información que necesito para la información de ASN.dapper PropInfo Setter para EntitySet heredado de la referencia de clase abstracta es nulo
El problema actual que estoy teniendo es un pedido de clase abstracta, esta clase es implementada por dos clases separadas AutionOrder y MerchantOrder usando una propiedad discriminator.
Como no puedo usar dapper para crear un objeto que sea una clase abstracta, en su lugar estoy usando una de las clases públicas. sin embargo, cuando se trata de construir el objeto que está fallando dentro de GetSettableProps
está encontrando el DeclaringType
adecuado, pero el método GetProperty
está devolviendo nulo cuando está buscando una propiedad que es internal
o es EntitySet
. Intenté hackearlo utilizando t.BaseType.GetProperty
y p.GetAccessors().First().GetBaseDefinition().DeclaringType.GetProperty(p.Name).GetSetMethod(true)
sin éxito.
objetos ficticios:
Solicitar
OrderID, nombre, dirección, rowversion (interna), los envíos (EntitySet), OrderDetails (EntitySet), cliente (EntityRef)
Envío
ShipmentID, Ord ERID, Trackingnumber
OrderDetails
OrderDetailID, IdPedido, producto, cantidad, precio
cliente
CustomerID, nombre,
Para este hit de SQL particular, estoy tratando de obtener algunas de las asignaciones de relación 1 a 1 que necesito.
SELECCIONAR o. * De ordenes como o deja unirse a Clientes como c en o.ID de cliente = c.ID de cliente donde o.ID de codificador en (1,2,3);
Esto es lo que estoy utilizando para utilizar pulcro y dejar que haga su magia:
using (var connection = new SqlConnection(_ConnectionString))
{
connection.Open();
results = connection.Query<MerchantOrder, MerchantCustomer, MerchantOrder>(sql.ToString(),
(o, c) => { o.Customer = c; return o; },
splitOn: "CustomerID");
}
Si cambio el fin de ser una clase pública este problema desaparece, sin embargo, pero esto no es un efecto deseado efecto secundario. Está fallando al intentar establecer el propInfo para RowVersion - cambiando esto a púbico en lugar de interno resuelto este problema - aunque no deseado. Pero luego falla cuando intenta crear los objetos Envíos para el pedido. De nuevo, nada de esto es un problema cuando Order es una clase pública.
También realizo consultas separadas para incorporar relaciones de muchos a uno, tales como envíos a pedidos y detalles de pedidos a pedidos, y la normalización de los resultados en un objeto de pedido adecuado. MerchantOrder es prácticamente una clase vacía sin una lógica especial. La diferencia de discriminación aquí es cómo terminamos encontrando el CustomerID que se abstrae antes de que el SQL real golpee de todos modos.
También estoy utilizando la última versión de dapper a partir del 20/12/2011.
Me gusta mucho, pero este problema me está haciendo ascender la cabeza, ¡gracias por la ayuda!
se puede añadir una prueba en su defecto por lo que puedo solucionar este problema? solo envíe un parche con él –
He añadido una prueba de falla @ https://code.google.com/r/johnzaborow-fail-test/ Estaba teniendo muchos problemas presionando automáticamente mis cambios, así que lo hice uno por uno . avísame si algo necesita ser cambiado. ¡Gracias! – John
arreglado ahora, gracias! –