TL; DRNHibernate Per таблица, формула ссылка родитель preoperty
Возьмите "подклассы" пример отсюда
https://github.com/jagregory/fluent-nhibernate/wiki/Fluent-mapping.
Я хочу иметь формулу ChildMap
, которая использует Name
свойство Parent
Long Детали
У меня есть иерархия наследования (Product
->StockProduct
, KitProduct
, ListingProduct
, VariationParentProduct
) с Таблица Inventory_Product, содержащая все общие поля, и 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)")
и KitProduct
Map(x => x.AvailableQuantity).Formula("(CASE ProductType WHEN 1 THEN (2) ELSE NULL END)")
Но NHibernate префиксы ProductType
с псевдонимом таблицы для [KitProduct
| StockProduct
], а не базовый продукт. Таким образом, его ссылка не существует
Есть ли эквивалент this.
в формуле для родительского объекта?
'ProductType' может быть 1 или 0? – user2586804
Поместите всю вашу карту и классы в вопрос. – user2586804
Пожалуйста, отправьте пример кода, чтобы мы могли вам помочь. Кроме того, в будущем обязательно отметьте свой код как код, чтобы сделать его более читаемым! – StormeHawke