簡體   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