我在使用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