Hibernate/NHibernate中的枚举表

And*_*ite 5 nhibernate enums hibernate

我们正在使用NHibernate,我们用于存储枚举类信息的常用模式之一是为枚举定义单独的表,并且仅使用枚举对主实体/表中的ID进行引用.一个简单的例子:

Message
-------
ID (bigint PK)
MessageTypeID (bigint FK)
Body (varchar)

MessageType
-----------
ID (bigint PK)
Value (varchar)
Run Code Online (Sandbox Code Playgroud)

MessageType表包含少量枚举值,如:SMS,MMS,PSMS等.

是否值得将枚举值放在这样的单独表中?我想枚举的专家是你可以在将来更容易地扩展它并且它更加规范化,但是你必须在每次获取消息时都进行连接.有没有一个突破点你会选择一个而不是另一个?

Die*_*cic 10

使用枚举意味着不要像现在这样使用另一个表.如你所说,它也更快,更简单.

在这两种情况下,您都可以添加更多选项,但问题是:如果在表中添加另一项,您是否需要重新编译应用程序才能添加此类功能?

我的意思是,如果您的应用程序设计是耦合的并且支持新的消息类型,您需要重新编译(可能因为您需要包含SMS实现),不值得拥有一个单独的表,并且您应该使用枚举

另一方面,如果您的实体缺少逻辑(例如,States或States表),或者您的应用程序可以在不重新编译的情况下插入新的消息类型,则应使用另一个表.为此,您可以将表更改为以下内容:

MessageType
-----------
ID (bigint PK)
Value (varchar)
ImplementationType (varchar) (ie: Xyz.SMSSender, Xyz)
Run Code Online (Sandbox Code Playgroud)

或者您可以拥有一个单独的配置文件,您可以在其中自定义注入的依赖项.