gpt4 book ai didi

nhibernate - 枚举到整数的映射导致每次刷新时都会更新

转载 作者:行者123 更新时间:2023-12-02 22:34:47 24 4
gpt4 key购买 nike

我正在尝试将模型中的枚举属性(System.DayOfWeek 的实例)映射到整数数据库字段。模型中的其他枚举属性应映射到字符串,因此我不想定义约定。

我知道使用流畅的映射应该可以实现这一点,例如:

Map(x => x.DayOfWeek).CustomType<int>();

事实上,乍一看这似乎有效。

但是,我注意到,每次刷新 session 时,以这种方式映射属性的实体实例都会更新,即使没有对它们进行任何修改。

为了找出导致此刷新的原因,我设置了一个 IPreUpdateEventListener,并检查了实体的 OldState 和 State。请参阅附图。在 OldState 中,相关对象是一个 int,而在 State 中,相关对象是 DayOfWeek。

如果我使用未指定类型属性的 HBM XML 映射,则不会出现此问题。

所以...

这是 GenericEnumMapper 中的错误或缺点吗?有没有办法告诉 FNH 映射不要在生成的 HBM 上指定任何类型属性?如果没有,我可以指定 NH 用于枚举的默认类型(那是什么)吗?

alt text

最佳答案

如果您使用我的枚举约定,则不会遇到这个问题。

public class EnumConvention : IPropertyConvention, IPropertyConventionAcceptance
{
public void Apply(IPropertyInstance instance)
{
instance.CustomType(instance.Property.PropertyType);
}

public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
{
criteria.Expect(x => x.Property.PropertyType == typeof(AddressType) ||
x.Property.PropertyType == typeof(Status) ||
x.Property.PropertyType == typeof(DayOfWeek));
}
}

然后您可以像常规一样映射您的属性:

Map(x => x.DayOfWeek);

编辑:更新了约定以选择用于 int 转换的特定枚举。此处未检查的所有枚举都将映射为字符串。您可能需要对实际测试的对象进行一些实验。我不确定 propertytype 是否会直接执行此操作。

关于nhibernate - 枚举到整数的映射导致每次刷新时都会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3531937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com