繁体   English   中英

Nhibernate映射鉴别符“错误的类异常”

[英]Nhibernate mapping discriminator “Wrong class Exception”

我正在为学校制作NHibernate演示,但是我有一个无法解决的问题。 您有票证和票证响应。 硬件票证是从票证继承的。 当执行ReadTicket方法时,我得到一个WrongclassException,说

“对象不是指定的子类:SC.BL.Domain.Ticket(区分符为:”)”

如果有人可以帮助我,我将非常高兴。

public class Ticket
  {
    public virtual int AccountId { get; set; }
    public virtual DateTime DateOpened { get; set; }
    [Required]
    [MaxLength(100, ErrorMessage = "Er zijn maximaal 100 tekens toegestaan")]
    public virtual string Text { get; set; }
    public virtual int TicketNumber { get; set; }
    public virtual TicketState State { get; set; }
    public virtual IList<TicketResponse> Responses { get; set; }

  }
public class HardwareTicket : Ticket
  {
    [RegularExpression("^(PC-)[0-9]+")]
    public virtual string DeviceName { get; set; }
  }

库:

 public class TicketRepository : ITicketRepository
      {    private static ISessionFactory mySessionFactory;

       Private static ISession mySession;

        public TicketRepository()
        {
          if (mySessionFactory == null)
          {
            var configuration = new Configuration().Configure("hibernate.cfg.xml");
            configuration.AddAssembly(typeof(Ticket).Assembly);
            configuration.AddAssembly(typeof(TicketResponse).Assembly);
            mySessionFactory = configuration.BuildSessionFactory();
          }
        }
public Ticket ReadTicket(int ticketNumber)
    {
      using (mySession = mySessionFactory.OpenSession())
      {
        var ticket = mySession.QueryOver<Ticket>().Where(x => x.TicketNumber == ticketNumber).SingleOrDefault();
        return ticket;
      }
    }

制图:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                    assembly="SC.BL.Domain"
                 namespace ="SC.BL.Domain">


  <class name="Ticket" table="Ticket" lazy ="true">
    <id name="TicketNumber">
      <generator class="identity"> </generator>
    </id>
   <discriminator column="Discriminator" type="System.String"  not-null="true"/>
    <property name="AccountId"></property>
    <property name="Text"></property>
    <property name="DateOpened"></property>
    <property name="State"></property>


    <bag name="Responses" lazy="true" inverse="true"
                          batch-size="25" cascade="all-delete-orphan">
      <key column="TicketNumber" />
      <one-to-many class="TicketResponse" />
    </bag>

    <subclass name="HardwareTicket" discriminator-value ="HardwareTicket" >
      <property name="DeviceName" not-null="false"></property>
    </subclass>

    <subclass name="Ticket" discriminator-value ="Ticket" >

    </subclass>
  </class>
</hibernate-mapping>

机票是您的主要基础课。 您不能在映射中添加与子类相同的子类。

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                    assembly="SC.BL.Domain"
                 namespace ="SC.BL.Domain">


  <class name="Ticket" table="Ticket" lazy ="true">
    <id name="TicketNumber">
      <generator class="identity"> </generator>
    </id>
   <discriminator column="Discriminator" type="System.String"  not-null="true"/>
    <property name="AccountId"></property>
    <property name="Text"></property>
    <property name="DateOpened"></property>
    <property name="State"></property>


    <bag name="Responses" lazy="true" inverse="true"
                          batch-size="25" cascade="all-delete-orphan">
      <key column="TicketNumber" />
      <one-to-many class="TicketResponse" />
    </bag>

    <subclass name="HardwareTicket" discriminator-value ="HardwareTicket" >
      <property name="DeviceName" not-null="false"></property>
    </subclass>
  </class>
</hibernate-mapping>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM