c# - net - Las mejores estrategias cuando se trabaja con micro ORM?
dapper vs ado net (3)
ni siquiera se escalan muy bien cuando puedes tener 5-6 combinaciones
Sí, no es así, pero eso es bueno, porque cuando el sistema que va a construir se vuelva complejo, puede hacer las uniones que desee, sin penalizaciones ni dolores de ejecución.
Sí, echo de menos cuando no necesitaba escribir todo esto UNE con Linq2SQL, pero luego creé una herramienta simple para escribir las combinaciones comunes, así obtengo el SQL básico para cualquier entidad y luego puedo construir desde allí.
Ejemplo:
[TableName("Product")]
[PrimaryKey("ProductID")]
[ExplicitColumns]
public class Product {
[PetaPoco.Column("ProductID")]
public int ProductID { get; set; }
[PetaPoco.Column("Name")]
[Display(Name = "Name")]
[Required]
[StringLength(50)]
public String Name { get; set; }
...
...
[PetaPoco.Column("ProductTypeID")]
[Display(Name = "ProductType")]
public int ProductTypeID { get; set; }
[ResultColumn]
public string ProductType { get; set; }
...
...
public static Product SingleOrDefault(int id) {
var sql = BaseQuery();
sql.Append("WHERE Product.ProductID = @0", id);
return DbHelper.CurrentDb().SingleOrDefault<Product>(sql);
}
public static PetaPoco.Sql BaseQuery(int TopN = 0) {
var sql = PetaPoco.Sql.Builder;
sql.AppendSelectTop(TopN);
sql.Append("Product.*, ProductType.Name as ProductType");
sql.Append("FROM Product");
sql.Append(" INNER JOIN ProductType ON Product.ProductoTypeID = ProductType.ProductTypeID");
return sql;
}
Empecé a usar PetaPOCO y Dapper y ambos tienen sus propias limitaciones. Pero, por el contrario, son tan rápidos como el Entity Framework que tiendo a soltar las limitaciones.
Mi pregunta es: ¿hay algún ORM que nos permita definir relaciones uno a muchos, muchos a uno y muchos a muchos en concreto? Tanto Dapper.Net como PetaPOCO implementan una especie de truco para falsificar estas relaciones y, además, ni siquiera se escalan muy bien cuando puede tener 5-6 combinaciones. Si no hay un único ORM micro que nos permita lidiar con él, entonces mi segunda pregunta es ¿debo dejar de lado el hecho de que estos micro ORM no son tan buenos para definir las relaciones y crear una nueva entidad POCO para cada tipo individual? de consulta que estaría ejecutando que incluye estos tipos de combinaciones múltiples ¿Puede esta escala bien?
Espero ser claro con mi pregunta. Si no, házmelo saber.
Generalmente sigo estos pasos.
- Creo mi modelo de vista de tal manera que represente los datos exactos y el formato que quiero mostrar en una vista.
- Realizo consultas directamente desde la base de datos a través de PetaPoco a mis modelos de vista.
En mi rama tengo un
T SingleInto<T>(T instance, string sql, params object[] args);
método que toma un objeto existente y puede asignar columnas directamente a él con el mismo nombre. Esto funciona brillantemente para este escenario.
Mi sucursal se puede encontrar aquí si es necesario. https://github.com/schotime/petapoco/
¿ Ayudaría QueryFirst aquí? Obtienes la velocidad de los microormas, con la comodidad adicional de cada error error de compilación, más inteligencia tanto para tus consultas como para su salida. Usted define sus uniones en SQL como Dios quiso. Si teclear condiciones de unión realmente te está molestando, DBForge podría ser la respuesta, y como trabajas en SQL, estas herramientas son compatibles y no estás bloqueado.