我采用了一个工作实体类和映射并转换为使用基类。
由于这样做,我得到“NHibernate.MappingException:属性映射的列数错误:”在下降类中的任何复合用户类型上:
public SubModel : TreeNodeBase
{
string Name { get; set; }
Quantity Gross { get; set; }
}
public class SubModelMapping : SubclassMap<SubModel>
{
public SubModelMapping()
{
Table("SubModel");
Abstract();
Map(x => x.Name); //normal types are fine
Map(x => x.Gross) //this causes the error
.LazyLoad()
.CustomType<QuantityCompositeUserType>()
.Columns.Clear()
.Columns.Add("Gross_Scalar", "Gross_UoM");
}
}
public class TreeNodeBaseMapping : ClassMap<TreeNodeBase>
{
public TreeNodeBaseMapping()
{
//We are using Table Per Concrete Class inheritance
// indicates that this class is the base
// one for the TPC inheritance strategy and that
// the values of its properties should
// be united with the values of derived classes
UseUnionSubclassForInheritanceMapping();
Id(x => x.Id);
Map(x => x.Level);
References(n => n.Parent)
.LazyLoad()
.Nullable();
HasMany(n => n.Children)
.KeyColumn("Parent_id")
.Where(x => x.Parent.Id == x.Id)
.LazyLoad();
}
}
- 在我更改为 TPCC 继承之前工作。
- 如果我删除任何复合用户类型映射,则可以使用。
知道是什么原因造成的吗?可以提供QuantityCompositeUserType
if 可能是相关的。
编辑 它创建的 SQL:
create table SubModel(
Id UNIQUEIDENTIFIER not null,
Name TEXT,
Gross_Scalar NUMERIC,
primary key (Id)
)
您可以看到预期的列Gross_UoM
完全丢失。
虽然如果这是一个常规ClassMap
的,而不是一个SubclassMap
,
create table Transactions (
Id UNIQUEIDENTIFIER not null,
Name TEXT,
Gross_Scalar NUMERIC,
Gross_UoM TEXT,
primary key (Id)
)