我想在NHibernate中使用「按類表層次結構」表策略在NHibernate中實現我的對象層次結構。我的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
我可以用下面的領域類重現此做錯了?
我指的是每個class * hierarchy *的表,它有一個表用於整個類層次結構。 我其實看過Fluent NHibernate,但我正在學習它,所以我發現XML(和相關的手冊)更容易。我也有一個複雜的對象模型,我必須處理那些不正常的東西。 – 2009-06-25 19:09:51
我想說,如果你還沒有這樣做,你最好的選擇是諮詢NH用戶組(nhusers @谷歌組)。他們在NH使用技巧上非常有幫助 – 2009-06-28 08:39:28