문제

나는 nhibernate 매뉴얼을 오해했거나 뭔가 잘못된 일을했다. 누구든지 도울 수 있습니까?

AuditLogentrys없이 사용자를 검색하려고합니다. 그러나 Nhibernate는 여전히 AuditLogentrys를로드하고 있습니다. 속성에 액세스 할 때 AuditLogentrys가로드되기를 원합니다.

public class User
{
    public virtual int UserId { get; set; }
    public virtual string UserName { get; set; }
    public virtual IList<AuditLogEntry> AuditLogEntrys { get; set; }
}

public class AuditLogEntry
{
    public virtual int Id { get; set; }
    public virtual DateTime DateRead { get; set; }
    public virtual string MachineName { get; set; }
}

매핑 :

  <class name="Model.User, Model" 
     table="User" 
     lazy="true">
  <id name="UserId" access="property" column="UserID">
    <generator class="native"></generator>
  </id>
  <property name="UserName" access="property" />
  <bag name="AuditLogEntrys" lazy="true" access="property">      
    <key column="UserID" />      
    <one-to-many class="Model.AuditLogEntry, Model"></one-to-many>
  </bag>

  <class name="Model.AuditLogEntry, Model"
     table="AuditLog"
     lazy="true">
    <id name="Id" access="property" column="ID">
      <generator class="native"></generator>
    </id>        
    <property name="DateRead" access="property" column="DateRead"></property>
    <property name="MachineName" access="property" column="MachineName"></property>    
  </class>

사용자를 얻기 위해 코드 :

  public IList<User> GetUserByUserName(string userName)
  {
      ICriteria criteria = NHibernateSession.CreateCriteria(typeof(User))
          .Add(Expression.Eq("UserName", userName));

      return GetByCriteria(criteria);
  }

이제 나는 AuditLogentry의 빈 컬렉션이있는 사용자 객체를 기대했지만 이것이 일어나는 일은 아닙니다.

어떤 아이디어 ?? 감사.

도움이 되었습니까?

해결책

게으른로드를 사용하면 인구가 많은 객체 목록이 표시되지만 아직 데이터베이스에서 "수화"되지 않았습니다. Lazily-Loaded 객체는 엔티티 유형이 아니라 컬렉션의 항목에 액세스 할 때 실제 데이터로 채워 지거나 수화됩니다.

프록시 객체를 사용하는 것이 엔티티 유형에서 모든 속성을 가상으로 만들어야하는 이유입니다. 프록시 유형은 엔티티 유형의 동적으로 생성 된 서브 클래스로 속성에 액세스 할 때 실제 호출을합니다.

바라건대 귀하의 질문을 이해했지만 차이점은 빈 목록이 아니라 실제 객체를 되 찾는 것입니다. 빈 목록을 되 찾으면 데이터베이스에서 사용자를 참조하는 AuditLogentry 항목이 없음을 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top