我正在尝试使用NHibernate中的“每类层次表”策略在一个表中实现对象层次结构。我的NHibernate映射出现错误,可以通过一个简单示例轻松重现。错误是:
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
我可以使用以下域类来重现它:
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>
有人知道我在做什么错吗?
最佳答案
我对c#和NHibernate不太熟悉,但是您确定在映射中Activity
应该设置为abstract="true"
吗?看来Activity类不是抽象的。Running
和Talking
不应位于Activity
内部,否则不会保存StartTime。对?
<subclass name="Activity"
...
<subclass name="Running"
...
</subclass>
<subclass name="Talking"
...
</subclass>
...
</subclass>
无论如何,错误消息表明NHibernate正在尝试创建带有语句的查询。但是没有任何价值。基本上,它试图像
...
WHERE foo IN (null)
如果我正确解析了代码。当命中引发此错误时,您想做什么?
您是否已经尝试在休眠配置中启用这些功能以检查发生了什么?
<property name="show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.use_sql_comments">true</property>
关于c# - 如何使用表每个类层次结构策略在nhibernate中管理多级类层次结构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1045573/