Я пишу некоторый код BLL, чтобы сидеть поверх инфраструктуры Entity (классы DAL, созданные с помощью DBContext, но это не имеет значения для этого вопроса). Вот одна из моих процедур:
public static Customer Get(int32 CustID, IEnumerable<string> IncludeEntities = null)
{
}
Поэтому, когда я вызываю его, я передаю CustID, необязательный список объектов, которые я хочу включить, например «Заказы» и «Детали заказа»:
Customer customer = CustomerBLLRepository.Get("ALFKI",
new[] { "Orders", "Orders.Order_Details"});
Он работает нормально, но мне не нравится вызывать его со списком или массивом строк — я хотел бы получить строгую типизацию, чтобы IDE могла помочь.
Я мог бы получить список типов, объявив его так:
public static void GetTest(Int32 CustID, params Type[] IncludeEntities)
{
}
и получить имя класса в виде строки для включения, но тогда вызывающая сторона должна использовать typeof следующим образом:
CustomerRepository.GetTest(123, typeof(Order), typeof(OrderDetails));
что не является концом света, но это вызывает проблемы, потому что OrderDetails на самом деле является навигационным свойством из Orders, а включение должно называться Orders.OrderDetails, и мне пришлось бы искать код, чтобы найти, какая сущность OrderDetails в дочернем элементе и по-прежнему генерировать строку.
Что мне действительно нужно, так это строго типизированный список сущностей для передачи в качестве включений в том же формате, который EF хочет, чтобы они включались, но я думаю, что я SOL.