首先让我说我是nHibernate的新手,所以如果对此的回答明显原谅我。 我有一个抽象的基类,其所有成员都是抽象的。
public abstract class BallBase
{
public abstract RunsScored { get; }
public abstract IsOut { get; }
public abstract IsExtra { get; }
public abstract GetIncrement();
}
具体实施如
public class WideBall : BallBase
{
public override RunsScored
{
private int m_RunsScored = 1;
public WideBall(): base()
{ }
public WideBall(int runsScored) : base()
{
m_RunsScored = runsScored;
}
public override int RunsScored
{
get
{
return m_RunsScored;
}
}
public override bool IsOut
{
get
{
return false;
}
}
public override bool IsExtra
{
get
{
return true;
}
}
public override int GetIncrement()
{
// add 0 to the balls bowled in the current over
// a wide does not get added to the balls bowled
return 0;
}
}
}
我想使用nHibernate来持久化具体类,但显然该类的所有公共成员都需要是虚拟的。 有没有办法继续我的基类方法?
答案 0 :(得分:3)
如果您想利用NHibernates实现延迟加载的能力,那么您需要使公共成员成为虚拟成员。
你可以做的是在class标签中设置属性lazy = false,如果你想要任何特定的成员(通常是包,列表等),那么将该成员的lazy属性设置为lazy = true并使其成为相应的成员虚拟。
我这样接近它好几次没问题。
答案 1 :(得分:3)
看一下C#文档,这些属性是虚拟的。你不需要做任何特别的事情,你可以继续。
答案 2 :(得分:1)
是的,但具体细节取决于您希望如何设置数据库架构。看看section 8 in the NHibernate documentation。我们正在使用<joined-subclass>
,它为我们节省了大量代码。
如果您不想要,则不必使用延迟加载。要关闭映射类的延迟加载,可以将lazy="false"
添加到类映射(.hbm.xml文件)。
顺便说一句,我假设你有一个特定的理由,纯粹是抽象的基类而不是接口?