NHibernate에서 "table per class hierarchy"전략을 사용하여 하나의 테이블에 객체 계층을 구현하려고합니다. 간단한 예제로 쉽게 재현 할 수있는 NHibernate 맵핑에 오류가 있습니다. 오류 :테이블 당 클래스 계층 전략을 사용하여 nhibernate에서 다중 레벨 클래스 계층 구조를 관리하는 방법은 무엇입니까?
public interface IActivity
{
Guid Id { get; set; }
}
public abstract class Activity : IActivity
{
public DateTime StartTime { get; set; }
public Guid Id { get; set; }
}
public class Running : Activity
{
public string Where { get; set; }
}
public class Talking : Activity
{
public string ToWhom { get; set; }
}
그리고 다음과 같은 XML 매핑 : 사람이 내가 어떤 생각을 가지고 있습니까
<?xml version="1.0" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="NHibernateTesting"
namespace="NHibernateTesting" >
<class name="IActivity"
lazy="false"
table="Activity"
discriminator-value="0"
abstract="true">
<id name="Id">
<generator class="guid" />
</id>
<discriminator column="Type" type="Int16" />
<subclass name="Activity"
discriminator-value="1"
abstract="true"
lazy="false">
<property name="StartTime" />
</subclass>
<subclass name="Running"
discriminator-value="2"
lazy="false"
extends="Activity">
<property name="Where" />
</subclass>
<subclass name="Talking"
discriminator-value="3"
lazy="false"
extends="Activity">
<property name="ToWhom" />
</subclass>
</class>
</hibernate-mapping>
이
System.NotSupportedException: Attempting to parse a null value into an sql string (column:activity0_.Type).
at NHibernate.SqlCommand.InFragment.ToFragmentString() in InFragment.cs: line 109
at NHibernate.Persister.Entity.SingleTableEntityPersister.DiscriminatorFilterFragment(String alias) in SingleTableEntityPersister.cs: line 551
나는 다음과 같은 도메인 클래스와 함께이 문제를 재현 할 수 있습니다 잘못하고있는거야?
저는 이것이 올바른 대답이라고 생각합니다. 하위 클래스 요소를 중첩해야합니다. inherits 속성은 서브 클래스가 별도의 맵핑 파일로 이동되는 경우에 사용됩니다. –
문제는 클래스에서 추상으로 선언되지 않았지만 (양호한 catch 임에도 불구하고) 중첩되지 않은 하위 클래스로 나타납니다. 도움 주셔서 감사합니다. 이 사람은 며칠 동안 저를 곤란하게 만들었습니다. –