Явная загрузка дочерних коллекций в EF 4.1

Учитывая следующую модель ...

public class Parent
{
    public int Id { get; set; }
    public ICollection<Child> Children { get; set; }
}

public class Child
{
    public int Id { get; set; }
    public ICollection<Grandchild> Grandchildren { get; set; }
}

public class Grandchild
{
    public int Id { get; set; }
}

... мы можем активную загрузку с помощью Включить Родителя со всеми ] Дочерние дети и Внуки за один шаг следующим образом:

context.Parents.Include(p => p.Children.Select(c => c.Grandchildren))

Возможно ли что-то подобное для явной загрузки ?

Дочернюю коллекцию можно явно загрузить следующим образом:

Parent parent = context.Parents.Find(parentId);
context.Entry(parent).Collection(p => p.Children).Load();

Но попытка загрузить дочерние элементы таким же образом, как с Include ...

context.Entry(parent)
    .Collection(p => p.Children.Select(c => c.Grandchildren)).Load();

... не компилируется и перегрузка строки Collection ...

context.Entry(parent).Collection("Children.Grandchildren").Load();

... выдает исключение ("... пути, разделенные точками, не разрешены ...").

Единственное, что я обнаружил работающим, - это явная загрузка Grandchildren в цикле: Предположим, у нас есть приложение Spring, упакованное как файл .war, и мы хотим ...

Я несколько раз сталкивался с одной и той же проблемой, и мне хотелось бы узнать мнение других людей об этой проблеме: Предположим, у нас есть приложение Spring, упакованное в файл .war , и мы хотим запустить его в нескольких средах . (development / test / preprod / prod / etc)

Для доступа к инфраструктуре, необходимой для приложения (базы данных / веб-службы и т.д.), мы сохраняем информацию о доступе в файлах конфигурации, также в этих файлах находится некоторая бизнес-конфигурация. Допустим, мы используем файлы .properties для этой цели (потому что у нас есть приложение Spring внутри war, и нам нравится, когда свойства читаются однострочным в контексте приложения) а также предположим, что в разных средах у нас нет одного и того же контейнера сервера приложений / сервлетов. (например: dev, test: jetty, preprod: tomcat, prod: glassfish)

Обычно я создавал несколько профилей Maven , по одному для каждой среды, необходимую конфигурацию в соответствующих файлах для каждый.

Недавно я столкнулся с вопросом от парня, занимающегося производством: «Так действительно ли нам нужно сгенерировать новую сборку с соответствующим профилем на сервере сборки, если БД изменена в среде препродов?» Я ответил: «Нет, вы действительно можете перейти в ... / webapps / currentApp / WEB-INF / classes / config / application.properties и изменить значения там, а затем перезапустить контейнер»

Мы нашли решение который решает некоторые аспекты этой проблемы: используя плагин сборки Maven, мы встраиваем Jetty внутрь war, что делает его пригодным для использования в качестве «исполняемой» войны, а также дает нам возможность иметь глобальный конфигурационный XML, из которого стартер встроенной Jetty создает / изменяет соответствующие файлы .properties в развернутом каталоге war и только после этого запускает приложение.

Но опять же, это не решает проблему, если вы хотите использовать что-то еще, кроме Jetty .

Как все справляются с одной и той же ситуацией?

10
задан BalusC 29 May 2017 в 06:14
поделиться