我已经使用了一个工作实体类并映射并转换为使用基类。
由于这样做,我得到“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();
}
}
知道是什么原因引起的吗?如果可能相关,可以提供QuantityCompositeUserType
。
修改 它创建的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)
)
答案 0 :(得分:1)
这似乎是一个老错误。
从github检出并构建源代码解决了这个问题。
nuget版本的日期是2012年6月,因此非常过时。我会问开发人员什么时候他们计划发布像这样的修补程序,并发布他们在这里说的内容。