J'ai commencé à utiliser PetaPOCO et Dapper et ils ont tous deux leurs propres limites. Mais au contraire, ils sont si rapides que Entity Framework que j'ai tendance à en laisser les limites.
Ma question est la suivante: existe-t-il un ORM qui nous permette de définir concrètement des relations un-à-plusieurs, plusieurs-à-un et plusieurs-à-plusieurs? Dapper.Net et PetaPOCO ont tous deux mis en place une méthode de piratage pour simuler ces relations et, de plus, ils ne fonctionnent même pas très bien lorsque vous avez 5 ou 6 jointures. S'il n'y a pas un seul micro ORM capable de nous en occuper, alors ma 2ème question est de savoir si ces micro ORM ne permettent pas de définir des relations et de créer une nouvelle entité POCO pour chaque type. de requête que j'exécuterais qui inclut ces types de multi-jointures? Est-ce que cette échelle peut bien?
J'espère que je suis clair avec ma question. Si non, faites le moi savoir.
Je suis généralement ces étapes.
Dans ma branche j'ai un
T SingleInto<T>(T instance, string sql, params object[] args);
méthode qui prend un objet existant et peut mapper des colonnes directement sur lui correspondant par nom. Cela fonctionne parfaitement pour ce scénario.
Ma branche peut être trouvée ici si nécessaire. https://github.com/schotime/petapoco/
ils ne sont même pas très bien adaptés quand vous avez 5-6 jointures
Oui, ce n'est pas le cas, mais c'est une bonne chose, car lorsque le système que vous allez créer commence à devenir complexe, vous êtes libre de faire les jointures souhaitées, sans pénalités de performance ni maux de tête.
Oui, je manque quand je n'ai pas besoin d'écrire tout ce JOINS avec Linq2SQL, mais ensuite j'ai créé un outil simple pour écrire les jointures communes, donc j'obtiens le SQL de base pour n'importe quelle entité.
Exemple:
[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;
}