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