在流畅的 NHibernate SubclassMap 中映射多列用户类型的正确方法是什么?
What is the proper way to map a Multi-column usertype inside a fluent NHibernate SubclassMap?
对于我正在处理的项目,我使用自定义类型将数据库中的 IP 地址作为二进制和地址族对处理。
如果我尝试在 SubclassMap 中映射到我的自定义类型,它会在启动期间因映射异常而失败
NHibernate.MappingException: property mapping has wrong number of
columns: AddressAsset.Address type: IPAddressBinaryUserType
映射失败代码如下:
public class AbstractAssetMap : ClassMap<AbstractAsset>
{
public AbstractFirewallAssetMap()
{
Table("asset");
Id(x => x.FirewallAssetSk).Column("asset_sk").GeneratedBy.Native();
DiscriminateSubClassesOnColumn<string>("type");
// ... other property mappings
}
}
public class AddressAssetMap : SubclassMap<AddressAsset>
{
public AddressAssetMap()
{
DiscriminatorValue(AbstractFirewallAsset.FirewallAssetType.Address);
Map(x => x.Address)
.CustomType<IPAddressBinaryUserType>()
.Columns.Add("address_family", "address");
}
}
// ... other SubclassMaps of AbstractAsset subclasses
如果我删除其中一列,则不再抛出 MappingException。然而,这不是解决方案,因为我需要两列的数据。
同样,如果我删除子 classing 并使用相同的自定义类型显式映射子 class,它似乎可以工作,并且在映射期间不会失败。
例如:
public class AddressAssetMap : ClassMap<AddressAsset>
{
public AddressAssetMap()
{
Table("asset");
Id(x => x.FirewallAssetSk).Column("asset_sk").GeneratedBy.Native();
Map(x => x.Address)
.CustomType<IPAddressBinaryUserType>()
.Columns.Add("address_family", "address");
// ... other property mappings
}
}
在流畅的 NHibernate SubclassMap 中映射多列用户类型的正确方法是什么?
您应该尝试升级 fluent nhibernate。请查看已知问题 https://github.com/jagregory/fluent-nhibernate/issues/210
对于我正在处理的项目,我使用自定义类型将数据库中的 IP 地址作为二进制和地址族对处理。
如果我尝试在 SubclassMap 中映射到我的自定义类型,它会在启动期间因映射异常而失败
NHibernate.MappingException: property mapping has wrong number of columns: AddressAsset.Address type: IPAddressBinaryUserType
映射失败代码如下:
public class AbstractAssetMap : ClassMap<AbstractAsset>
{
public AbstractFirewallAssetMap()
{
Table("asset");
Id(x => x.FirewallAssetSk).Column("asset_sk").GeneratedBy.Native();
DiscriminateSubClassesOnColumn<string>("type");
// ... other property mappings
}
}
public class AddressAssetMap : SubclassMap<AddressAsset>
{
public AddressAssetMap()
{
DiscriminatorValue(AbstractFirewallAsset.FirewallAssetType.Address);
Map(x => x.Address)
.CustomType<IPAddressBinaryUserType>()
.Columns.Add("address_family", "address");
}
}
// ... other SubclassMaps of AbstractAsset subclasses
如果我删除其中一列,则不再抛出 MappingException。然而,这不是解决方案,因为我需要两列的数据。
同样,如果我删除子 classing 并使用相同的自定义类型显式映射子 class,它似乎可以工作,并且在映射期间不会失败。 例如:
public class AddressAssetMap : ClassMap<AddressAsset>
{
public AddressAssetMap()
{
Table("asset");
Id(x => x.FirewallAssetSk).Column("asset_sk").GeneratedBy.Native();
Map(x => x.Address)
.CustomType<IPAddressBinaryUserType>()
.Columns.Add("address_family", "address");
// ... other property mappings
}
}
在流畅的 NHibernate SubclassMap 中映射多列用户类型的正确方法是什么?
您应该尝试升级 fluent nhibernate。请查看已知问题 https://github.com/jagregory/fluent-nhibernate/issues/210