【问题标题】:NHibernate - Money Type - Multiple Fields in TableNHibernate - 货币类型 - 表中的多个字段
【发布时间】:2010-11-03 23:50:50
【问题描述】:

我正在尝试使用 NHibernate 将金融交易保存到数据库中,并且遇到了许多建议使用 Money Type 的博客文章,其中金额存储为双倍,货币为存储为字符串 - 即数据库中有两个字段。

出于我的目的,我将在同一张表中有多个财务记录 - 例如。单价、以美元计的税、以美元计的储蓄等。上述方法可行,但会导致数据重复,因为每个字段(在本例中为 3)的货币类型都会有一列。这是不必要的,因为用于储蓄的货币与用于价格等的货币总是相同的。如果一种货币是美元,那么另一种货币就是美元......

有没有人遇到过类似的问题,如果有,你能告诉我你最终得到的解决方案吗?

谢谢

日本

【问题讨论】:

  • 我最初的反应是:忍受重复;它将大大简化您的对象模型。

标签: c# sql nhibernate


【解决方案1】:

我在很多地方也看到过同样的事情,到目前为止我还没有看到任何解释。它有什么好处?这不是人们做生意的方式或逻辑系统的工作方式。如果我在美国做国际业务,我的系统仍然有美元的内部基础。

货币作为事件的边界条件很重要,您需要汇率。甚至是国际银行。我目前将我所有的毒品钱(美元)寄到开曼群岛,在那里我可以使用我的钱也以美元计价。也许你的是欧元。所以他们得到了它,他们所做的就是将两者转换成他们内部使用的任何货币,无论是贝壳。现在他们必须跟上这些东西,但他们必须在任何给定时间知道美元/贝壳之间的汇率才能知道它们对我来说有多少,而贝壳/欧元才能知道它们有多少适合你。这个小东西不给他们蹲,它是一个价值对象,怎么可能呢?在这种情况下,货币将在帐户级别固定,而不是一堆浮动的东西。

一般来说,货币将由其他东西固定,就像您观察到的那样,在行级别。一行数据是相关的,您应该能够对货币价值进行数学运算,在这种情况下,一行中的货币必须相同。也许我在欧洲做生意,必须用欧元报价。出于历史目的,我可能想记录两种货币的报价与付款。我质疑这是否是单行设计,但如果我决定是,您描述的 Money 对象是具有两个组件的单值对象。它应该被认为是一个单一的实体,我认为我在这里描述的内容在语义上与“货币”对象不同,还不如通过我们不尝试合成为单一的小数/货币列来明确描述;e 货币值,因为它们无法进行比较或对其进行数学运算。

我不会走这条路,因为这会导致语义上的细微不一致令人困惑,并且可能不会添加任何内容。你真的会在哪里使用它,而不是按行货币给你同样的东西,通常以更合理的方式?

但是如果经理坚持你做一些根本没有意义或更糟的事情,就 NHibernate 而言,你已经声明了一个单一的原子实体,Money 恰好有 2 个组件,一个小数和一个字符串。因为金钱现在是一个单一的原子单位,你必须始终为每笔钱拥有两列,没有避免重复列的解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多