代码之家  ›  专栏  ›  技术社区  ›  Andrew

NHibernate和重写属性

  •  0
  • Andrew  · 技术社区  · 16 年前

    首先,我要说的是,我是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 回复  |  直到 16 年前
        1
  •  3
  •   Paco    16 年前

    看看C#文档,这些属性是虚拟的。没有什么特别的事,你可以去做。

        2
  •  3
  •   David    16 年前

    这是正确的,如果你想利用NHibernates的能力来实现延迟加载,那么你需要使公共成员虚拟化。

    我已经这样做过很多次了,没问题。

        3
  •  1
  •   David Rubin    16 年前

    section 8 in the NHibernate documentation . 我们正在使用 <joined-subclass> 它为我们节省了大量的代码。

    如果不想,您不必使用延迟加载。要关闭映射类的延迟加载,可以添加 lazy="false"

    顺便说一下,我假设您有一个纯粹抽象基类而不是接口的特定原因?