gpt4 book ai didi

Nhibernate - 初始化列表 - 最佳实践?

转载 作者:行者123 更新时间:2023-12-03 23:52:06 25 4
gpt4 key购买 nike

我只是想知道一些 CodeWarning(ConstructorsShouldNotCallBaseClassVirtualMethods),以及是否有更好的方法来做到这一点。我有一个简单的日志收集器类,我正在使用 NHibernate 来检索一些对象。

有时我自己(当然)创建对象并将它们添加到 NHibernate 以保持持久性。确保 的最佳方法是什么?列表永远不会为 NULL。

目前我正在这样做,但它似乎并不“完美”。对这个话题有任何想法吗?

public class LogRun
{
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; set; }
public virtual int LogMessageCount { get { return LogMessages.Count; } }

public LogRun()
{
LogMessages = new List<Log>();
}


}

最佳答案

LogMessages 是持久化的东西吗?如果是这样,最好的做法是永远不要公开公共(public)二传手。如果您从数据库中检索 NHibernate,然后用新的 IList 替换该 IList,NHibernate 会变得很奇怪:

var myLog = session.Get<LogRun>(1);
Assert.True(myLog.LogMessages.Count > 0);
myLog.LogMessages = new List<Log>();

如果您注意到,NHibernate 正在返回一个代理对象并用通用列表替换它会导致它在您尝试保存时变得不稳定。

通常,我更喜欢初始化一个私有(private)字段,然后只向客户端公开一个 getter:
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<> 并且我为 add 添加了一个辅助函数。

我的实现看起来像
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);
}
}

关于Nhibernate - 初始化列表 - 最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1001584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com