[英]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.