0

TL;DR

ここから「サブクラス」の例を取り上げます

https://github.com/jagregory/fluent-nhibernate/wiki/Fluent-mapping .

のプロパティChildMapを使用する数式が必要ですNameParent

長い詳細

すべての共通フィールドを保持する Inventory_Product テーブルと、サブクラスの特定のフィールドを含む継承階層 ( Product-> StockProductKitProduct、 ) がListingProductあります。これはサブクラス テーブル マッピングと呼ばれるものだと思います。 VariationParentProductInventory_StockProductInventory_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 プレフィックス。] ではなく、ベース製品。したがって、その参照元の列は存在しませんKitProductStockProduct

this.親オブジェクトの式に相当するものはありますか?

4

1 に答える 1