سؤال

ولقد إما يساء فهمها دليل 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، ولكن ليس هذا ما يحدث.

وأي أفكار ؟؟ شكرا.

هل كانت مفيدة؟

المحلول

ومع تحميل كسول، وستحصل على قائمة بالسكان من الكائنات، ولكنها ليست بعد "رطب" من قاعدة البيانات. الكائنات تحميل بتكاسل، ليست أنواع الكيان، ولكن بدلا من ذلك "الكائنات الوكيل" التي سوف يتم ملؤها / رطب مع البيانات الحقيقية عند الوصول إلى العناصر الموجودة في المجموعة.

واستخدام الكائنات الوكيل هو السبب لماذا لديك لجعل كل من الممتلكات الخاصة بك الظاهري في أنواع كيان الخاص بك. أنواع وكيل والفئات الفرعية من نوع كيان، والذي جعل المكالمات الفعلية إلى قاعدة البيانات عند الوصول إلى خصائص حيوي ولدت.

ونأمل فهمت سؤالك، ولكن الفرق هو أن تحصل على الكائنات الفعلية الظهر، وليس قائمة فارغة. إذا نعود قائمة فارغة، فهذا يعني أنه لا توجد بنود AuditLogEntry الرجوع العضو بك في قاعدة البيانات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top