0

我有一个enum(哪些值是位标志)如下:

[Flags]
public enum ItemType
{
    InventoryPart = 0x1,
    Service = 0x2,
    Discount = 0x4,
    NonInventory = 0x8,
    MiscellaneousCharge = 0x10,
    InventoryAssembly = 0x20,
    DescriptionLine = 0x40,
    All = InventoryPart | Service | Discount | NonInventory | MiscellaneousCharge | InventoryAssembly | DescriptionLine,
}

然后我有一个实体(Item),上面有一个属性(注意:ItemTypenullable):

 private ItemType? _itemType;
 public ItemType? ItemType { get { return _itemType; } set { _itemType = value; } }

我在hbm.xml文件中按如下方式映射此属性:

<property name="ItemType" type="Int32" column="ItemType" not-null="false" />

在数据库中,该字段是一个整数(允许为空)。

当我运行代码时,我从 NHibernate 库中得到一个异常:

无效的演员表(检查您的映射是否有属性类型不匹配);PrlSystems.AccountingLibrary.Model.Item 的设置器

注意:当此属性 ( Item.ItemType) 不是nullable之前的时,一切正常,使此属性nullable导致上述异常。int此外,对于像s、DateTimes这样的内置类型nullable,这些类型的类属性可以直接映射到它们的具体类型:intDateTime.

我试过用这种方式映射它,但它仍然不起作用:

System.Nullable`1[[System.Int32]] 

现在正确的 NHibernate 映射应该是什么?

4

1 回答 1

0

好的,在更详细地查看了这个问题之后,这个问题的主要原因是:

您不能将 Enum 值转换为 (int?),只能将其转换为 (int)。

为了解决这个问题,我通过实现 IUserType 接口编写了一个自定义枚举映射器。在那里,我处理可空枚举显式。

于 2021-08-31T17:04:59.140 回答