загрузить объект дважды и изменить один из них, другой не изменился - PullRequest
3 голосов
/ 13 июня 2010
Father father = BL.GetFatherById(1);  
Product product = BL.GetByID(123);  

(father.Products[553] == product)  

product.delete = true;  

father.Products[553].delete == false !!??   

почему это?

разве они не связаны? это тот же объект.

Ответы [ 2 ]

3 голосов
/ 13 июня 2010

Как вы можете прочитать в разделе 10.3 справочного руководства NHibernate идентификатор базы данных и идентификатор объекта CLR эквивалентны для сеанса .

Следовательно, Object.ReferenceEquals(foo, bar) приведет кtrue тогда и только тогда, когда foo и bar присоединены к одному сеансу и сопоставлены с одной и той же строкой базы данных.Будьте осторожны при использовании == для сравнения идентификаторов объектов - оператор может быть перегружен (но вы обычно должны это знать).

Следовательно, вы всегда должны получать один и тот же объект независимо от того, какой запрос вы используете дляобъект до тех пор, пока вы остаетесь в том же сеансе.Вы используете несколько сеансов?Может быть, шаблон «Единица работы» и вы сравниваете объекты, возвращенные из разных единиц работы?

1 голос
/ 17 июня 2010

Сначала позвольте мне сказать вам, что то, что вы делаете, УЖАСНО. Что это на самом деле означает

father.Products[553] == product;

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

  • Вы удаляете продукт, который уже по индексу 553 из коллекции? Нет
  • Ты нарушаешь отношения? между отцом и продуктом по индексу 553? Нет
  • Вы устанавливаете связь с отец с новым продуктом? Нет
  • Вы устанавливаете отношения от нового продукта до отца? Нет

So

  1. Выставлять продукты в IEnumerable, а не в списке
  2. Добавить Добавить / Удалить методы, которые будут обрабатывать синхронизацию отношений.

Посмотрите здесь, как это сделать (не обращая внимания на реальный вопрос)

Как отобразить это? HasOne x Рекомендации

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