Является ли LogMessages постоянной вещью? Если так, то лучше никогда не подвергать публичного сеттера. NHibernate становится странным, если вы получаете из базы данных и затем заменяете этот IList новым:
var myLog = session.Get<LogRun>(1);
Assert.True(myLog.LogMessages.Count > 0);
myLog.LogMessages = new List<Log>();
Если вы заметили, NHibernate возвращает прокси-объект, а замена его на общий список приведет к тому, что он станет ненадежным при попытке сохранить обратно.
Как правило, я предпочитаю иметь закрытое поле, которое я инициализирую, а затем предоставляю клиенту только геттер:
public class LogRun
{
private IList<Log> logMessages = new List<Log>();
public virtual int Id { get; private set; }
public virtual DateTime StartTime { get; set; }
public virtual DateTime EndTime { get; set; }
public virtual IList<Log> LogMessages { get { return logMessages; } }
public virtual int LogMessageCount { get { return LogMessages.Count; } }
public void AddLogMessage(Log log)
{
logMessages.Add(log);
}
}
На самом деле, я иду дальше, клиент получает IEnumerable <>, и я добавляю вспомогательную функцию для добавления.
Моя имплентация будет выглядеть как
public class LogRun
{
private IList<Log> logMessages = new List<Log>();
public virtual int Id { get; private set; }
public virtual DateTime StartTime { get; set; }
public virtual DateTime EndTime { get; set; }
public virtual IEnumerable<Log> LogMessages { get { return logMessages; } }
public virtual int LogMessageCount { get { return LogMessages.Count(); } }
public void AddLogMessage(Log log)
{
logMessages.Add(log);
}
}