当前位置:  开发笔记 > 大数据 > 正文

如何使用NHibernate持久化枚举

如何解决《如何使用NHibernate持久化枚举》经验,为你挑选了3个好方法。

有没有办法使用NHibernate将枚举持久保存到数据库?这是一个包含代码和枚举中每个值的名称的表.

我想保留没有实体的枚举,但仍然有一个从所有其他引用实体到枚举表的外键(枚举的int表示).



1> Emad..:

你们为什么要过于复杂呢?这很简单.

映射看起来像这样:


model属性如下所示:

public virtual OrganizationTypes OrganizationType { get; set; }

Enum看起来像这样:

public enum OrganizationTypes
{
    NonProfit = 1,
    ForProfit = 2
}

NHibernate会自动解决这个问题.为什么打字超过你需要????


我不明白为什么你的答案没有得到更多的投票.您可以使用易于理解的清晰代码提供答案.
这在nHibernate 2.1中不起作用,因为它会导致重影:http://stackoverflow.com/questions/3247188/nhibernate-updates-unchaged-records
我怀疑这不是一个非常受欢迎的答案,因为更大的问题是将枚举作为字符串持续存在.正如你所指出的那样将int存储为int是有点小事,但将它们存储为字符串是一个挑战......

2> Garo Yeriaza..:

您可以直接使用枚举类型:http://web.archive.org/web/20100225131716/http://graysmatter.codivation.com/post/Justice-Grays-NHibernate-War-Stories-Dont-Use-Int- If-You-Mean-Enum.aspx.如果你的底层类型是一个字符串,它应该使用字符串表示,如果它是数字,它将只使用数字表示.

但你的问题措辞听起来像是在寻找不同的东西,而不是一个枚举.您似乎想要一个查找表而不创建单独的实体类.我不认为这可以在不创建单独的实体类的情况下完成.



3> Paco..:

一个简单但不那么漂亮的解决方案:

创建一个整数字段,并将映射文件中的映射设置为该字段.创建一个使用整数字段的公共属性.

private int myField;
public virtual MyEnum MyProperty
{
   get { return (MyEnum)myField; }
   set { myField = value; }
}

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有