Я работаю над приложением ASP.NET, которое использует Nhibernate и в последнее время сталкивается с очень странным поведением.
У меня есть сопоставление пациента-> терпеливого адреса в моем объекте Biz. Пациент может иметь более одного адреса, но в таблице пациента у нас есть столбец mailingAddress, который указывает на строку в таблице Patint_Mailing. мой файл сопоставления похож на это.
<many-to-one name="mailingAddress"
column="mailingAddress"
class="DataLoad.Biz.PatientAddress, DataLoadBiz" />
Я создаю CSV-файл с информацией о пациенте, и я ожидаю, что в этот файл будут включены все пациенты и их почтовые адреса. Иногда это работает абсолютно нормально, но иногда это не так.
Например, если у пациента A есть AddressA и AddressB. Мы выбираем AddressB в качестве почтового адреса в приложении. Если я скомпилирую это и запущу, я получу файл csv с пациентом A с AddressB. Теперь, если я войду в SQL и удалю пациента A и заново создаю пациента A с той же настройкой, я получу файл csv с пациентом A с адресом A, даже если в базе данных указано, что пациент A имеет почтовый адрес B
Есть мысли, почему это странное поведение?
Это мой файл отображения пациента
<many-to-one name="practice"
column="practice"
class="DataLoad.Biz.Practice, DataLoadBiz" />
<many-to-one name="mailingAddress"
column="mailingAddress"
class="DataLoad.Biz.PatientAddress, DataLoadBiz" />
<bag name="addresses" lazy="false" >
<key column="patient"/>
<one-to-many class="DataLoad.Biz.PatientAddress, DataLoadBiz"/>
</bag>
<bag name="mailings" table="MAILING_PATIENT">
<key column="patient"></key>
<many-to-many column="mailing" class="DataLoad.Biz.Mailing, DataLoadBiz" />
</bag>
и это файл сопоставления PatientAddress
<many-to-one name="patient"
column="patient"
class="DataLoad.Biz.Patient, DataLoadBiz" />
Как только я обновлю данные пациента с правильным почтовым адресом, я могу зайти в базу данных и убедиться, что она обновлена должным образом. Так что там нет проблем. но когда nhibernate читает эти значения обратно из БД, кажется, что он игнорирует тот факт, что я обновил maildadraeess
У меня есть веб-форма с полями «Исходный адрес» и «Почтовый адрес». Пользователь может скопировать оригинальный адрес в почтовый адрес, и когда он нажимает кнопку «Далее», я вызываю метод AddAddress () в классе моего пациента
public virtual void AddAddress(ref PatientAddress Address)
{
Address.patient = this;
this.addresses.Add(Address);
}
и в моем объекте Dao я вызываю метод Save
patientAddressDao.Save(updatedAddress);
затем я обновил почтовый адрес объекта пациента на правильный обновленный адрес
patient.mailingAddress = updatedAddress;