作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将模型中的枚举属性(System.DayOfWeek 的实例)映射到整数数据库字段。模型中的其他枚举属性应映射到字符串,因此我不想定义约定。
我知道使用流畅的映射应该可以实现这一点,例如:
Map(x => x.DayOfWeek).CustomType<int>();
事实上,乍一看这似乎有效。
但是,我注意到,每次刷新 session 时,以这种方式映射属性的实体实例都会更新,即使没有对它们进行任何修改。
为了找出导致此刷新的原因,我设置了一个 IPreUpdateEventListener,并检查了实体的 OldState 和 State。请参阅附图。在 OldState 中,相关对象是一个 int,而在 State 中,相关对象是 DayOfWeek。
如果我使用未指定类型属性的 HBM XML 映射,则不会出现此问题。
所以...
这是 GenericEnumMapper 中的错误或缺点吗?有没有办法告诉 FNH 映射不要在生成的 HBM 上指定任何类型属性?如果没有,我可以指定 NH 用于枚举的默认类型(那是什么)吗?
最佳答案
如果您使用我的枚举约定,则不会遇到这个问题。
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/
我是一名优秀的程序员,十分优秀!