Я создал DLL в Visual Studio, которая содержит мою Entity Framework ObjectContext
. Я пытаюсь получить доступ к различным ObjectSet
с PowerShell. Я делаю это потому, что у меня есть некоторые XML-файлы, которые я извлекаю из веб-службы, и я хотел бы использовать функции xml PowerShell (автоматическое создание свойств, нефатальная оценка $ null) для сопоставления входящих значений XML с сущностями. необходимости использовать классы C # Xml. По сути, мой скрипт PowerShell является загрузчиком данных.
Я могу просто создать и создать экземпляр ObjectContext. Я могу видеть все свойства, используя $myObjectContext | Get-Member -MemberType Property
. Однако у меня возникают проблемы с пониманием, когда именно элементы возвращаются из запросов к ObjectSet.
Я знаю, что в Linq-to-Entities происходит отложенная загрузка и что объекты загружаются только при перечислении коллекции. Я пытался вызвать методы расширения, но похоже, что PowerShell не поддерживает лямбда-выражения.
Вот мой вопрос. Как я узнаю, когда мои запросы будут явно перечислены? Например, вот одно из свойств (определено как ObjectSet<code><VehicleType
> VehicleTypes {get;} ).
PS> $myObjectContext.VehicleTypes
Создает следующую ошибку, которую я буду обозначать как (TheError) для дальнейшего использования:
format-default : Exception has been thrown by the target of an invocation.
+ CategoryInfo : Not Specified: (:) [format-default], TargetInvocationException
+ FullyQualifiedErrorId : System.Reflection.TargetInvocationException
НО, PS> $myObjectContext.VehicleTypes | Select-Object VehicleTypeID
выдает правильный вывод (таблица идентификаторов VehicleTypeID)
Однако PS> $myObjectContext.VehicleTypes | Select-Object *
выдает ошибку, как описано выше.
PS> $myObjectContext.VehicleTypes | Sort-Object
, кажется, всегда перечисляет коллекцию, что понятно, так как нужно сравнить все элементы, чтобы сравнить их.
Я должен заметить, что после однократного перечисления коллекции, вызов PS> $myObjectContext.VehicleTypes
НЕ дает вышеуказанную ошибку - она отображает коллекцию точно так же, как и вы. Это действительно странно, но я думаю, что это как-то связано с отложенной загрузкой (вот почему я упоминал об этом выше).
Может ли кто-нибудь еще подтвердить / объяснить мне такое поведение и, возможно, дать мне несколько советов по передовым методам использования Entity Framework с PowerShell?
Кроме того, если я сделаю что-то вроде PS> $myObjectContext.VehicleTypes | Where-Object {$_.VehicleTypeID -eq $vehicleTypeId}
, то будет ли он достаточно умен, чтобы выполнить эту сторону сервера запросов, или будет собирать все записи из БД и возвращать только ту, которую я ищу. Если ситуация будет последней, я думаю, что могу застрять с использованием C # (с его не очень дружественным синтаксисом xml) для доступа к данным.