Mic*_*eth 1 c# nhibernate nhibernate-mapping
我试图在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
Run Code Online (Sandbox Code Playgroud)
我可以使用以下域类重现这一点:
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; }
}
Run Code Online (Sandbox Code Playgroud)
以下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>
Run Code Online (Sandbox Code Playgroud)
有没有人知道我做错了什么?
我对c#和NHibernate并不熟悉,但你确定Activity应该abstract="true"在映射中设置吗?看起来Activity类不是抽象的.
不宜Running与Talking驻留内Activity其他的开始时间将不会被保存.对?
<subclass name="Activity"
...
<subclass name="Running"
...
</subclass>
<subclass name="Talking"
...
</subclass>
...
</subclass>
Run Code Online (Sandbox Code Playgroud)
无论如何错误消息表明NHibernate试图用in-statement创建一些查询.但它没有价值.基本上它试图像bild一样
...
WHERE foo IN (null)
Run Code Online (Sandbox Code Playgroud)
如果我正确解析了代码.点击这个错误时你想做什么?
您是否已经尝试在hibernate配置中启用这些功能来检查发生了什么?
<property name="show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.use_sql_comments">true</property>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2866 次 |
| 最近记录: |