Nhibernate and enums

本文关键字:enums and Nhibernate | 更新日期: 2023-09-27 18:20:22

将枚举与数据库(NHibernate+mysql)一起使用是个好习惯吗?优点和缺点是什么?它对数据库效率有影响吗?

Nhibernate and enums

将枚举与数据库(NHibernate+mysql)一起使用是一个好习惯吗?

我认为从程序员的角度来看,在适用的情况下使用枚举是有意义的。它使代码可读性更强,并消除了数据库中的"无效"值。

优点和缺点是什么?它对数据库效率有影响吗?

优点:

  1. 代码的可读性
  2. 数据完整性

缺点:

  1. 枚举转换为数据库类型的开销。尽管这可能微不足道。我还没有对此进行测试,但我认为情况确实如此

我相信社区的其他人肯定可以添加到上面的列表中,但我想说,总体而言,在有意义的地方使用枚举是一个好主意。

我认为从代码的角度来看,枚举肯定是有意义的。但是,如果您使用NHibernate生成数据库模式,请使用MySQL的Enum Data Type查找它。这将把枚举存储为字符串,但强制只输入有效值。从存储的角度来看,这可能代价高昂,而且在尝试重构时也是如此。枚举数据库类型将在数据库级别为您处理验证,因此任意更新将不那么令人担忧,我更喜欢存储数值并依靠应用程序进行验证,因为它可以更容易地添加或重命名枚举成员。

我不知道这是否是最好的方法(如果你使用的是fluent nhibernate,这几乎肯定可以通过使用约定来实现),但如果你看看这篇博客文章,你可以找到一个IUserType,它可以在MySQL中将枚举映射为整数,并克服遇到的一些挑战。