그것은 나의 이해이다. First and Second Level caching in NHibernate 같은 곳에서 - NHibernate의 ISession.get<T>(object id)
은 "default"setup - session 등을 사용할 때 동일한 id
으로 두 번 호출되면 같은 인스턴스를 반환해야합니다. 그러나 두 개의 인스턴스가 분리되어 있습니다.NHibernate ISession.get을 호출하는 것은 동일한 id를 가진 두번 객체 ID가 두 개의 다른 인스턴스를 반환 함
나는 막연하게 비슷한 질문을 보았지만 this 및 this과 같은 검색에서는 유용한 결과를 얻지 못했습니다. 당신이 그것을보고 할 경우에
var repo = (IEntityRepository) new SqliteEntityRepository();
var bi1 = repo.GetBillingItemByID(26);
var bi2 = repo.GetBillingItemByID(26);
Assert.AreSame(bi1, bi2); // fails
여기 NHibernateHelper
: 여기
BillingItem IEntityRepository.GetBillingItemByID(int id)
{
var session = Helpers.NHibernateHelper.OpenSession();
using (ITransaction tran = session.BeginTransaction())
{
var ret = session.Get<BillingItem>(id);
tran.Commit();
return ret;
}
}
이 실패 내 테스트입니다 :
여기 내 get
방법이다
internal static class NHibernateHelper
{
private static ISessionFactory _sessionFactory;
internal static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
var configuration = new Configuration();
configuration.Configure();
configuration.AddAssembly(typeof(BillingItem).Assembly);
configuration.AddAssembly(typeof(PaymentItem).Assembly);
var mapper = new ModelMapper();
mapper.AddMappings(typeof(Mappings.BillingItemMapping).Assembly.GetExportedTypes());
mapper.AddMappings(typeof(Mappings.PaymentItemMapping).Assembly.GetExportedTypes());
var mapping = mapper.CompileMappingForAllExplicitlyAddedEntities();
configuration.AddDeserializedMapping(mapping, null);
SchemaMetadataUpdater.QuoteTableAndColumns(configuration);
_sessionFactory = configuration.BuildSessionFactory();
}
return _sessionFactory;
}
}
}
무엇 내가 여기서 누락 된거야?
어떻게 Assert.AreSame()을 비교합니까? 'Equals()'또는'CompareTo()'를 오버로드 했습니까? –
나는 무엇이든 과대 적재하지 않았다. NUnit입니다. 참조를 비교하는 것입니다. –