12

私は PetaPOCO と Dapper を使い始めましたが、どちらにも独自の制限があります。しかし逆に、それらは Entity Framework よりも非常に高速であるため、その制限を手放す傾向があります。

私の質問は、1 対多、多対 1、多対多の関係を具体的に定義できる ORM はありますか? Dapper.Net と PetaPOCO はどちらも、これらの関係を偽造するハック的な方法を実装しています。それを処理できる単一のマイクロ ORM がない場合、私の 2 番目の質問は、これらのマイクロ ORM は関係を定義するのにそれほど適していないという事実を手放し、すべてのタイプに対して新しい POCO エンティティを作成する必要があるかどうかです。これらのタイプのマルチ結合を含む、実行するクエリの これはうまくスケーリングできますか?

私の質問が明確であることを願っています。そうでない場合は、お知らせください。

4

3 に答える 3

7

私は通常、これらの手順に従います。

  1. ビューに表示したい正確なデータとフォーマットを表すような方法でビューモデルを作成します。
  2. データベースから PetaPoco 経由でビュー モデルに直接クエリを実行します。

私のブランチには

T SingleInto<T>(T instance, string sql, params object[] args);

既存のオブジェクトを受け取り、列を名前で一致するオブジェクトに直接マップできるメソッド。これは、このシナリオでは見事に機能します。

必要に応じて、私のブランチはここにあります。 https://github.com/schotime/petapoco/

于 2012-04-11T07:39:55.497 に答える
2

5 ~ 6 個の結合がある場合は、うまくスケーリングできません。

はい、そうではありませんが、それは良いことです。構築するシステムが複雑になり始めたときに、パフォーマンスの低下や頭の痛い問題を起こすことなく、必要な結合を自由に実行できるからです。

はい、Linq2SQL でこのすべての JOINS を記述する必要がない場合は見逃しますが、共通の結合を記述するための簡単なツールを作成したので、任意のエンティティの基本的な SQL を取得し、そこから構築できます。

例:

[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;
    }
于 2012-04-10T18:55:00.897 に答える