NHibernate - сохранение родителя, когда у меня есть только идентификаторы детей - PullRequest
2 голосов
/ 16 марта 2009

Допустим, у меня есть такие классы:

public class Parent
{
   public int ParentId {get;set;}
   public IList<Child> Children {get;set;}
   public string Name {get;set;}
}

public class Child
{
   public int ChildId {get;set;}
}

Кто-то вызывает метод для сохранения нового родителя и передает мне имя и список дочерних идентификаторов, и я хочу сохранить родителя. Есть ли способ, которым я могу сохранить родительский объект и связать с ним дочерние идентификаторы, не загружая дочерние объекты, а затем добавляя их в коллекцию дочерних? Это кажется пустой тратой на загрузку объектов только для того, чтобы я мог получить NHibernate для их сохранения, когда у меня уже есть идентификаторы, и это было бы все, что мне понадобилось бы, чтобы сохранить родительский объект, если бы я делал это в хранимой процедуре.

, используя ... NHibernate 2.0.1GA, SQL Server 2005

Jon

Ответы [ 3 ]

1 голос
/ 03 июня 2009

Как-то так будет работать, я думаю

var child1 = Session.Load<Child>(12);
var child2 =Session.Load<Child>(23);
var parent = Session.Get(253);
parent.Name = "new parent name";
parent.Children.Add(child1);
parent.Children.Add(child2);

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

0 голосов
/ 17 марта 2009

Вы можете сопоставить коллекцию целых чисел (т.е. Parent.Children как IList ), или вы можете сопоставить коллекцию объектов (т.е. Parent.Children как IList ). Если вы сопоставляете объекты, вы должны обновить БД, используя объекты, то есть вам нужно будет загрузить дочерние объекты, чтобы сохранить родительский объект. Если вместо этого вы решите сопоставить целые идентификаторы, вы можете обновить их с помощью идентификаторов.

PS. Если ваши идентификаторы имеют какой-то другой примитивный тип (например, guids, строки и т. Д.), То тот же аргумент по-прежнему применяется.

0 голосов
/ 16 марта 2009

Если родительский объект связан с дочерними элементами, в каждом дочернем элементе должно быть свойство Parent (которого я не вижу), и вам все равно придется обновлять дочерние элементы, поэтому вам придется загружать всех дочерних элементов. из базы данных.

В противном случае, как сохраняются отношения между родителем и детьми? Если это не просто сохранить родителя с помощью свойства Name и даже не связываться с детьми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...