Учитывая следующую модель ...
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 .
Как все справляются с одной и той же ситуацией?