почему Nhibernate запрашивает всю коллекцию, чтобы удалить дочерний элемент? - PullRequest
3 голосов
/ 01 марта 2011

Привет
Это классы:

 public class Child
 {
  public int Id { get; set; }
  public int Name { get; set; }
 }

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

, когда я хочу удалить ребенка из коллекции, я написал бы что-то вроде:

currentParent.Children.Remove(toBeDeletedChild);

проблемакогда строка выше желает быть выполненной, я получаю многочисленные запросы к базе данных.
Кажется, работает ли она как цикл, который запрашивает все дочерние элементы и ищет дочерний элемент, как это:* Это означает, что я получу 100 запросов к базе данных для удаления ребенка от родителя с 100 детьми.

Я использую NH3 и Свободный Nhibernate

Отображение класса родителей:

HasMany(p => p.Children)
                .LazyLoad()
                .Inverse()
                .Cascade.AllDeleteOrphan();

1 Ответ

0 голосов
/ 26 апреля 2011

Я бы попытался изменить Parent на

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

и в ParentMap

HasMany(p => p.Children).AsSet()
                .LazyLoad()
                .Inverse()
                .Cascade.AllDeleteOrphan();

Также вам нужно будет использовать HashSet вместо списка для коллекции детей.

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