我有三个实体Email
& Sms
个实体继承自Message
实体
public class Message
{
virtual public long Id { get; set; }
virtual public string Body { get; set; }
}
public class Email : Message
{
virtual public string Subject { get; set; }
virtual public string ToAddress { get; set; }
}
public class Sms : Message
{
virtual public string Number{ get; set; }
}
映射:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Core.Domain" namespace="Core.Domain.Model">
<class name="Message" table="Core_Message" >
<id name="Id" >
<generator class="native" />
</id>
<version name="Version"/>
<property name="Body" not-null="true"/>
</class>
</hibernate-mapping>
,
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Core.Domain" namespace="Core.Domain.Model">
<union-subclass name="Email" extends="Message" table="Core_Email" >
<property name="Subject"/>
<property name="ToAddress"/>
</union-subclass>
</hibernate-mapping>
,
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Core.Domain" namespace="Core.Domain.Model">
<union-subclass name="Sms" extends="Message" table="Core_Sms" >
<property name="Number"/>
</union-subclass>
</hibernate-mapping>
此消息我有一个例外:
Cannot use identity column key generation with <union-subclass> mapping for: Core.Domain.Model.Message
我需要采用什么策略来生成Id
而不是native
?
我希望Id的这个值是:1,2,3,4,5,6,...
1,3,5用于电子邮件,2,4,6用于短信
答案 0 :(得分:2)
标识符对于继承层次结构中涉及的所有表必须是唯一的。因此,不允许为每个表单独工作的生成器。查看关于生成器的NHibernate参考部分,查看(some) available algorithms列表。 hilo算法对于数字身份是常见的,但不一定是最容易手动操作的。