gpt4 book ai didi

postgresql - 如何使用 npgsql 将 F# 枚举样式的可区分联合映射到 postgres

转载 作者:行者123 更新时间:2023-11-29 12:10:02 25 4
gpt4 key购买 nike

我在 PG 中有一个表,其中的字段需要存储在 1 到 5 之间。在 F# 端我有这个枚举:

type PriceTier =
| P1
| P2
| P3
| P4
| P5

我直接使用 npgsql,没有类型提供程序或 ORM。当我发送带有参数的命令时:

    let build (row:CustomerRecord) =
[P("@code", row.code);.... P("@defaultPrice", row.defaultPrice);....]

我得到错误:

The CLR type Models+PriceTier isn't supported by Npgsql or your PostgreSQL. If you wish to map it to a PostgreSQL composite type you need to register it before usage, please refer to the documentation.

所以我读了http://www.npgsql.org/doc/types/enums_and_composites.html并做:

NpgsqlConnection.MapEnumGlobally<PriceTier>();

但这不起作用,因为该类型不是真正的枚举,而是 F# 类型。

所以,我有两个问题:

  • 是否可以按原样使用 F# 类型而不转换为枚举?
  • 是否可以在不手动进行转换的情况下在 PriceTier -> Int 之间进行映射?

最佳答案

我不是 F# 专家,但如果我理解正确的话,您的 PriceTier 是一个有区别的联合,而不是一个枚举。可区分的联合可以包含任意字段,因此它们实际上不以任何方式对应于枚举。如果你的特定联合类型在逻辑上确实是一个枚举,那么将它实际定义为一个枚举类型而不是一个联合可能是有意义的(例如参见 this post),在这种情况下你可以使用常规的 Npgsql 枚举映射功能。

请注意,我不确定 Npgsql 是否甚至可以知道您的类型是一个受歧视的联合 - 在一天结束时它似乎只是一个 CLR 类型,就像任何其他类型一样(虽然我对此可能是错误的)。

关于postgresql - 如何使用 npgsql 将 F# 枚举样式的可区分联合映射到 postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41130626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com