使用带有 NHibernate.Mapping.Attributes 的鉴别器为每个子类做表
Posted
技术标签:
【中文标题】使用带有 NHibernate.Mapping.Attributes 的鉴别器为每个子类做表【英文标题】:Doing table per subclass using a discriminator with NHibernate.Mapping.Attributes 【发布时间】:2010-06-29 11:21:20 【问题描述】:我正在尝试使用 NHibernate.Mapping.Attributes 执行 Table per subclass: using a discriminator。 hbm 应该如下所示:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<subclass name="SalesReport" discriminator-value="SalesReport" extends="Report">
<join table="SalesReport">
<key foreign-key="FK_SalesReport_Document" />
<property name="TotalSales" />
<property name="NetGrouth" />
</join>
</subclass>
</hibernate-mapping>
代码如下所示:
[Subclass(NameType=typeof(SalesReport),
DiscriminatorValueObject=DocumentDiscriminator.SalesReport,
ExtendsType=typeof(Report))]
[Serializable]
public partial class SalesReport : Common.Documents.Report
[Join(Table = "SalesReport")]
[Key(1, ForeignKey = "FK_SalesReport_Document")]
[Property(2)]
public virtual decimal TotalSales
get;
set;
[Join(Table = "SalesReport")]
[Key(1, ForeignKey = "FK_SalesReport_Document")]
[Property(2)]
public virtual decimal NetGrouth
get;
set;
结果是这样的:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<subclass name="SalesReport" discriminator-value="SalesReport" extends="Report">
<join table="SalesReport">
<key foreign-key="FK_SalesReport_Document" />
<property name="TotalSales" />
</join>
<join table="SalesReport">
<key foreign-key="FK_SalesReport_Document" />
<property name="TotalSales" />
<property name="NetGrouth" />
</join>
</subclass>
</hibernate-mapping>
它创建了正确的表结构(一个表有两个十进制字段和一个 PF/FK 到报告表),但是在插入数据时它失败了,因为它为每个字段生成了两个插入:
NHibernate: INSERT INTO SalesReport (TotalSales, SalesReport) VALUES (@p0, @p1);@p0 = 13400,20, @p1 = 41
NHibernate: INSERT INTO SalesReport (NetGrouth, SalesReport) VALUES (@p0, @p1);@p0 = 0, @p1 = 41
有没有办法使用 NHibernate.Mapping.Attributes 来完成这项工作?
【问题讨论】:
【参考方案1】:您应该遵循 XML 版本来使用 NHMA: 所以,如果你想要一个,只添加一个 NHMA.Join,两个 [Property(2 & 3, Name="...")]
【讨论】:
以上是关于使用带有 NHibernate.Mapping.Attributes 的鉴别器为每个子类做表的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有或不带有 Appium 的 Robot Framework 集成 WinAppDriver?
使用带有 ajax Rest 调用的 Spring CSRF 和带有 Thymeleaf 的 HTML 页面
如何在带有 React 的 Typescript/JSX 中使用带有箭头函数的泛型?
优化数据库有啥更好的方法:使用带有不同过滤器的一堆存储过程,还是使用带有 if 条件的单个存储过程?