我正在编写一些 BLL 代码以位于实体框架之上(使用 DBContext 生成的 DAL 类,但这对于这个问题并不重要)。这是我的例行程序之一:
public static Customer Get(int32 CustID, IEnumerable<string> IncludeEntities = null)
{
}
因此,当我调用它时,我传递了一个 CustID,一个我想要包含的实体的可选列表 - 例如“Orders”和“OrderDetails”:
Customer customer = CustomerBLLRepository.Get("ALFKI",
new[] { "Orders", "Orders.Order_Details"});
它工作正常,但我不喜欢用字符串列表或数组来调用它——我想获得强类型,以便 IDE 可以提供帮助。
我可以通过像这样声明它来接收类型列表:
public static void GetTest(Int32 CustID, params Type[] IncludeEntities)
{
}
并获取类名作为包含工作的字符串,但是调用者必须像这样使用 typeofs:
CustomerRepository.GetTest(123, typeof(Order), typeof(OrderDetails));
这不是世界末日,但这会导致问题,因为 OrderDetails 实际上是 Orders 的导航属性,并且包含需要调用 Orders.OrderDetails,我必须让代码四处寻找哪个实体 OrderDetails在子级中并且仍然生成字符串。
我真正想要的是一个强类型的实体列表,以包含的相同格式传递,EF 希望它们作为包含,但我认为我是 SOL。