Я думаю, что я упускаю кое-что концептуально относительно NHibernate. У меня есть объект Instrument
, который отображается в таблицу tools
в моей базе данных. У меня также есть объект BrokerInstrument
, который отображается в мою таблицу brokerInstruments
в моей базе данных. brokerInstrumnets
- это дочерняя таблица для инструментов
. Мои классы выглядят так:
public class Instrument : Entity
{
public virtual string Name { get; set; }
public virtual string Symbol {get; set;}
public virtual ISet<BrokerInstrument> BrokerInstruments { get; set; }
public virtual bool IsActive { get; set; }
}
public class BrokerInstrument : Entity
{
public virtual Broker Broker { get; set; }
public virtual Instrument Instrument { get; set; }
public virtual decimal MinIncrement { get; set; }
}
В моем модульном тесте, если я извлекаю инструмент
из базы данных, а затем удаляю его с помощью ISession.Удалите
, он будет удален из базы данных вместе с дочерними элементами (в моем файле сопоставления включен каскадный режим). Однако прибор
все еще существует в памяти. Например:
[Test]
public void CascadeTest()
{
int instrumentId = 1;
IInstrumentRepo instruments = DAL.RepoFactory.CreateInstrumentRepo(_session);
Instrument i = instruments.GetById<Instrument>(instrumentId); // retrieve an instrument from the db
foreach (BrokerInstrument bi in i.BrokerInstruments)
{
Debug.Print(bi.MinIncrement.ToString()); // make sure we can see the children
}
instruments.Delete<Instrument>(i); // physically delete the instrument row, and children from the db
IBrokerInstrumentRepo brokerInstruments = DAL.RepoFactory.CreateBrokerInstrumentRepo(_session);
BrokerInstrument deletedBrokerInstrument = brokerInstruments.GetById<BrokerInstrument>(1); // try and retrieve a deleted child
Assert.That(instruments.Count<Instrument>(), Is.EqualTo(0)); // pass (a count in the db = 0)
Assert.That(brokerInstruments.Count<BrokerInstrument>(), Is.EqualTo(0)); // pass (a count of children in the db = 0)
Assert.That(i.BrokerInstruments.Count, Is.EqualTo(0)); // fail because we still have the i object in memory, although it is gone from the db
}
Каковы наилучшие методы работы с объектом в памяти? Сейчас я нахожусь в несогласованном состоянии, потому что у меня есть объект Instrument
в памяти, которого нет в базе данных. Я начинающий программист, поэтому очень ценю подробные ответы со ссылками.