【问题标题】:Nhibernate mapping discriminator "Wrong class Exception"Nhibernate 映射鉴别器“错误的类异常”
【发布时间】:2016-02-09 14:46:17
【问题描述】:

我正在为学校制作 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>

【问题讨论】:

    标签: c# hibernate nhibernate nhibernate-mapping hibernate-mapping


    【解决方案1】:

    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>
      </class>
    </hibernate-mapping>
    

    【讨论】:

      猜你喜欢
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多