Вопрос

Я хочу отследить список корневых объектов, которые не содержатся ни одного элемента. Я хочу работать следующий псевдо для работы:

using (session1 = [...]) {
  IList<FavoriteItem>list = session1.Linq<FavoriteItem>().ToList();
}

list.Add(item1);
list.Add(item2);
list.Remove(item3);
list.Remove(item4);
var item5 = list.First(i => i.Name = "Foo");
item5.Name = "Bar";

using (session2 = [...]) {
  session2.Save(list);
}

Это должно автоматически вставлять item1 и item2, удалить элемент3 и item3 и обновлять элемент5 (т.е. я не хочу звонить sesssionsion.saveorupdate () для всех предметов отдельно.

Можно ли определить псевдовязку, которая не связана со столом? Например, я хочу определить класс Favief и Map 2 Scilection его свойств и, чем я хочу написать код, как это:

using (session1 = [...]) {
   var favs = session1.Linq<Favorites>();
}
favs.FavoriteColors.Add(new FavoriteColor(...));
favs.FavoriteMovies.Add(new FavoriteMovie(...));

 using (session2 = [...]) {
  session.SaveOrUpdate(favs);  
}

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

На самом деле я хочу, чтобы объект IPERSISTENTCOLLECTORUCET, который треки добавляет и удаляет, что не принадлежит родительскому объекту и подписывается для себя (то же самое, что происходит с учетом свойств объектов, только в моем случае у меня нет родительского объекта). Это отлично работает хорошо, если коллекции принадлежат сущности, в этом случае я могу добавлять и удалять элементы между двумя сеансами.

Любая помощь горячо приветствуется.

Это было полезно?

Решение 2

Я до сих пор не нашел реального решения этой проблемы. Моя работа до сих пор до сих пор, что я добавил коллекцию в качестве имущества сбора ребенка в другой объект, из которого существует только один экземпляр. Но это решение разрывается, если будут больше экземпляров этого объекта, и у него есть недостаток, что версия его увеличивается каждый раз, когда элемент добавляется или удален.

Другая работа вокруг должна была бы создать псевдовязку без свойств / столбцов (кроме ID).

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

Последняя альтернатива будет переосмыслить грязную функциональность проверки самостоятельно, но это добавит некоторую сложность и дублирование кода.

Если кто-то знает лучшие альтернативы, я был бы рад за любые комментарии.

Другие советы

Упрощенное решение, чем Pseudo-объект, будет обернуть список в объекте, который управляет тому, что вы хотите.

public class FavoriteList : IEnumerable
{
  private List<FavoriteItem> list;
  private ISession session;
  public FavoriteList(ISession session) 
  {
    list = session.Linq<FavoriteItem>().ToList();
    this.session = session;
  }

  public void Add(FavoriteItem item)
  {
    session.SaveOrUpdate(item); 
    list.Add(item);
  }

  public void Remove(FavoriteItem item)
  {
     session.Delete(item); //or something like that
     list.Remove(item);
  }

  public IEnumerator GetEnumerator()
  {
     return (list as IEnumerable).GetEnumerator();
  }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top