gpt4 book ai didi

c# - Entity Framework 6中如何生成38位ID映射

转载 作者:行者123 更新时间:2023-11-30 18:31:27 25 4
gpt4 key购买 nike

只是为了澄清这个 Entity Framework 特定问题不是建议的 NHibernate 问题的重复,并且不仅涉及 .Net 数字类型,还涉及 EF 映射


编辑

所以更简洁地重述这个问题:

如何将 EF6 配置为使用 38 位有效数字的类型作为 Id?

我必须将从 Oracle 数据库导出的数据*导入 MS-SQL*。该数据库中的 ID 列定义为 NUMBER(38)。一些 ID 值是负数。

虽然我没想到我们会存储那么多行数据(天啊!)但我不确定如何最好地对此进行建模。

首先考虑如何在我的 POCOS 中表示它并查看 MSDN 我可以看到 integral types don't give enough digitsneither do floating point values .

使用 BigInteger因为我的 Id 字段允许任意大的值,但我的 google-fu 没有找到从 BigInteger 通过 EF 到 SQL 数据类型的明显链接。

我猜我可以在代码中将我的 ID 声明为 BigInteger,并在映射中使用 HasColumnType 将 DB 列设置为 NUMERIC 并设置 HasPrecision( 38, 0)

谁能说说这个建议是否可行,或者如果不可行如何实际解决这个问题?


更新

所以,我今天早上进行了一些测试。

EF 6 包含为类型配置设置包罗万象的配置的功能,因此...

    modelBuilder.Properties<BigInteger>().Configure(config => config.HasPrecision(38, 0));
modelBuilder.Properties<BigInteger>().Configure(config => config.HasColumnType("Numeric"));

但是,如果我尝试运行它,则会出现错误:

The type 'System.Numerics.BigInteger' cannot be used to filter properties. Only scalar types, string, and byte[] are supported.

所以要么我必须在别处将 BigInteger 设置为 Numeric 配置,要么尝试其他方法

最佳答案

你能在导入过程中将 ID 转换为 Guid 吗?

    BigInteger bigInteger = new BigInteger(int.MaxValue);
Guid guid = new Guid(bigInteger.ToByteArray());

关于c# - Entity Framework 6中如何生成38位ID映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20133311/

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