Meilleures stratégies pour travailler avec un micro ORM?

c# dapper massive orm petapoco

Question

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.

Réponse acceptée

Je suis généralement ces étapes.

  1. Je crée mon modèle de vue de manière à représenter exactement les données et le format que je souhaite afficher dans une vue.
  2. J'interroge directement depuis la base de données via PetaPoco sur mes modèles de vue.

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/


Réponse populaire

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;
    }



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi