NHibernate和重写的属性

时间:2010-02-04 21:50:29

标签: c# nhibernate

首先让我说我是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来持久化具体类,但显然该类的所有公共成员都需要是虚拟的。 有没有办法继续我的基类方法?

3 个答案:

答案 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文件)。

顺便说一句,我假设你有一个特定的理由,纯粹是抽象的基类而不是接口?