TL;DR
ここから「サブクラス」の例を取り上げます
https://github.com/jagregory/fluent-nhibernate/wiki/Fluent-mapping .
のプロパティChildMap
を使用する数式が必要ですName
Parent
長い詳細
すべての共通フィールドを保持する Inventory_Product テーブルと、サブクラスの特定のフィールドを含む継承階層 ( Product
-> StockProduct
、KitProduct
、 ) がListingProduct
あります。これはサブクラス テーブル マッピングと呼ばれるものだと思います。 VariationParentProduct
Inventory_StockProduct
Inventory_KitProduct
私の基本クラスProduct
には、 というプロパティがありますProductType
。
public abstract class Product
{
public virtual Guid ProductID { get; set; }
public abstract ProductType ProductType { get; }
public virtual int AvailableQuantity { get; set; }
}
public class StockProduct : Product
{
// Some other fields
public override ProductType ProductType
{
get { return ProductType.Stock; }
}
}
public class KitProduct : Product
{
// Some other fields
public override ProductType ProductType
{
get { return ProductType.Kit; }
}
}
public class ListingProduct : Product
{
// Some other fields
public override ProductType ProductType
{
get { return ProductType.Listing; }
}
}
public class VariationParentProduct : Product
{
// Some other fields
public override ProductType ProductType
{
get { return ProductType.VariationParent; }
}
}
public enum ProductType
{
Stock = 0,
Kit = 1,
Listing = 2,
VariationParent = 3
}
そしてマッピング
public class ProductMap : ClassMap<Product>
{
public ProductMap()
{
Table("Inventory_Products");
Id(x => x.ProductID).GeneratedBy.Guid();
Map(x => x.Sku);
Map(x => x.ProductType).CustomType<ProductType>().Access.ReadOnly();
}
}
public class StockProductMap : SubclassMap<StockProduct>
{
public StockProductMap()
{
Table("Inventory_StockProducts");
KeyColumn("ProductID");
Map(x => x.AvailableQuantity).Formula("(CASE ProductType WHEN 0 THEN (1) ELSE NULL END)");
}
}
public class KitProductMap : SubclassMap<KitProduct>
{
public KitProductMap ()
{
Table("Inventory_KitProducts");
KeyColumn("ProductID");
Map(x => x.AvailableQuantity).Formula("(CASE ProductType WHEN 0 THEN (2) ELSE NULL END)");
}
}
StockProduct
/で定義された式でこれにアクセスして、KitProduct
別のSQLを実行する必要があります
試着しましたStockProduct
Map(x => x.AvailableQuantity).Formula("(CASE ProductType WHEN 0 THEN (1) ELSE NULL END)")
およびキット製品
Map(x => x.AvailableQuantity).Formula("(CASE ProductType WHEN 1 THEN (2) ELSE NULL END)")
ただし、 [ |ProductType
のテーブル エイリアスを持つnhibernate プレフィックス。] ではなく、ベース製品。したがって、その参照元の列は存在しませんKitProduct
StockProduct
this.
親オブジェクトの式に相当するものはありますか?