【问题标题】:Store enum as integer in RavenDB在 RavenDB 中将枚举存储为整数
【发布时间】:2011-07-21 13:13:31
【问题描述】:

我想将枚举存储为 RavenDB 文档中的整数值,而不是全名。这样做,我想确保更改枚举值的名称不会破坏持久性。

使用 FluentNHibernate,我可以创建自定义约定,但我没有找到任何与 RavenDB 匹配的内容。

【问题讨论】:

    标签: enums nosql integer conventions ravendb


    【解决方案1】:

    您现在可以这样做:

    store.Conventions.SaveEnumsAsIntegers = true;
    

    【讨论】:

      【解决方案2】:

      您可以通过创建一个 JsonConverter 来执行此操作,然后将其添加到 documentStore.Conventions.Converters

      事实上,我们明确存储了名称,因此您只需从 documentStore.Conventions.Converters 中删除 EnumJsonConverter 即可

      【讨论】:

      • 谢谢。我设法做到了。因为这与 NHibernate 相同,所以我只是想知道是否有充分的理由存储字符串值而不是整数。为什么要这样设计?
      • @dlang 在撰写此评论时,我可以这样做:Session.Advanced.Conventions.CustomizeJsonSerializer = serializer => { serializer.Converters.Remove(serializer.Converters.Single(x => x is Raven.Abstractions.Json.JsonEnumConverter); };
      • @NicolasCadilhac 和 Daniel Lang,通过存储名称,如果枚举值发生变化,您仍然会得到相同的枚举。例如,公共枚举 Fruit{Apple, Orange} 更改为公共枚举 Fruit{Banana, Apple, Orange} 任何以前持久的 Apple 枚举都将是 Banana。除非字符串发生变化,否则使用字符串 apples 将始终是 apples :)
      • 我同意 David 的观点,如果您要更改枚举的名称,那么您正在更改基础数据,因此您确实应该更新数据。枚举整数只是数据的抽象。
      【解决方案3】:

      从今天开始,您可以这样做:

      store.Conventions.CustomizeJsonSerializer = jsonSerializer =>
      {   
          jsonSerializer.Converters.Remove(jsonSerializer.Converters.Where(c =>
          c.GetType() == typeof(JsonEnumConverter)).First());
      }; 
      
      store.Conventions.QueryEnumsAsIntegers = true;
      

      来源:http://groups.google.com/group/ravendb/browse_thread/thread/18fef7b38252b27d

      【讨论】:

      • 今天更短了store.Conventions.SaveEnumsAsIntegers = true;
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多