내 수업에서 lazy = "true"를 사용하면 응용 프로그램이 완벽하게 작동하지만 성능은 끔찍합니다. 튜토리얼에서 이것을 만들었을 때 나는 가능한 한 빨리 작동하도록하고 싶었습니다. (나는이 튜토리얼을 사용했다 : http://geekswithblogs.net/BobPalmer/archive/2010/04/23/mapping-object-relationships---quickstart-with-nhibernate-part-3.aspx은 빠르게 작동하는 것을 얻는 데 매우 도움이되었다)게으른 로딩이 NHibernate와 작동하지 않는다
하나의 객체 만 사용해야 할 때 이러한 다 대일 클래스를 모두로드 할 필요는 없다. 게으른 로딩을 다시 켜는 것이 이치에 맞습니다. 그런 다음, 객체를 들여다 보았고, 주요 객체 내에서 다 대일 (many-to-one) 클래스에 대한 예외를 보았습니다. 나중에 이러한 속성을 사용하려고하면 나는 다음과 같은 오류 얻을 :이 세션이 닫혀 있음을 의미 같은데요
"Could not initialize proxy - no Session."
을, 너무 게으른 -로드 추가 개체를 시도 할 때 오류가 발생합니다. 내 세션 제공자는 다음과 같이 (자습서와 동일) 모양 : 다음과 같이 내 저장소에서 사용하는
class SessionProvider {
private static ISessionFactory _sessionFactory;
private static Configuration _config;
public static ISessionFactory SessionFactory {
get {
if (_sessionFactory == null) {
_sessionFactory = Config.BuildSessionFactory();
}
return _sessionFactory;
}
}
private static Configuration Config {
get {
if (_config == null) {
_config = new Configuration();
_config.AddAssembly(Assembly.GetCallingAssembly());
}
return _config;
}
}
}
:
private static ISession GetSession() {
return SessionProvider.SessionFactory.OpenSession();
}
:이 기능에서 세션을 얻을 수
using (var session = GetSession()) { ... }
내 질문이 여기에 무엇을 할 것으로 예상됩니까? 세션을 열린 상태로 유지 하시겠습니까? 모든 저장소에서 정적으로 만드시겠습니까? 나는 NHibernate가 어떻게 작동하는지 충분히 이해하지 못했다. 내 우선 순위는 현재 차이점이 있다면 데이터베이스에서 읽는 것뿐입니다. 이것은 궁극적으로 우리의 웹 사이트와 다양한 C# .Net 응용 프로그램 모두에서 사용될 코드 라이브러리에 있습니다.
다음 두 도움말은 도움이되었습니다. http://blogs.hibernatingrhinos.com/nhibernate/archive/0001/01/01/the-repository-pattern.aspx 및 http://nhforge.org/wikis/patternsandpractices/nhibernate- and-unit-of-work-pattern.aspx이 질문에 대한 대답으로 표시 하겠지만 웹 응용 프로그램 및 Windows 응용 프로그램에서이 문제를 사용하려고 할 때 일어날 일에 대해 더 알고 싶습니다. 응용 프로그램 유형에 따라 두 세션을 제공하는 방식을 전환 할 무언가를 만들어야합니까? – Chris
Windows 응용 프로그램의 경우 연결이 끊어진 세션을 사용하거나 화면 당 하나의 세션을 원할 수 있습니다. 여기서도 작업 단위 패턴을 계속 사용할 수 있습니다. 그러나 동일한 데이터베이스에서 많은 클라이언트를 사용하지 않도록 서버를 고려해야합니다. – jonnii
네,하지만 이것을 웹 응용 프로그램에서도 사용할 것입니다. 응용 프로그램이 ASP.Net 응용 프로그램에서 실행되고 있는지 여부를 어떻게 확인할 수 있습니까? HttpContext를 확인해야하지만 기본적으로 활성화되어 있지는 않습니다. 단순히 그것을 사용하도록 설정하고 null인지 확인하는 것이 가장 좋은 방법은 아닙니다. – Chris