我在使用Table per Hierarchy
設置和實體框架時設計服務層時遇到問題。我的問題是,我得到一個特定類型的對象,但我想檢查類型是什麼。這是更好的代碼解釋:瞭解抽象類的子類型
摘要域類
public abstract class Order
{
public string OrderId { get; set; }
}
繼承類
public class OrderProduct : Order
{
public List<OrderDetail> OrderDetails { get; set; }
}
public class OrderSubscription : Order
{
public decimal Fee { get; set; }
public DateTime? EndDate { get; set; }
}
所以你基本上可以做到這一點:
orderRepository.GetOrders();
//OR
orderRepository.GetOrders().OfType<OrderProduct>();
//OR
orderRepository.GetOrders().OfType<OrderSubscription>();
我'米巴斯使用第一個。它返回IQueryable<Order>
我要讓1個服務層的方法,使該得到的任何類型,例如呼叫:
public Order GetOrder(string orderId)
{
return orderRepository.GetOrders().FirstOrDefault(o => o.OrderId == orderId);
}
的問題
在我的控制,我怎麼能告訴在撥打電話GetOrder(string orderId)
後,對象是什麼類型?如果它屬於OrderProduct
類型,那麼當我施放它時,我還需要導航屬性(List<OrderDetail>
)。
我看到的一個解決方案是爲每個Order
類創建2類服務層調用。調用1,如果它返回null,則調用另一個。但是有沒有OOP方式在C#中做到這一點?
關閉我的頭頂,只是在抽象類和繼承類中添加一個類型的道具設置它。或類似的東西。 – Terrance 2011-06-02 18:46:19