从IBM Db2 dll返回smallint时出现问题

问题描述 投票:0回答:1

我当前使用的是 IBM.EntityFrameworkCore 版本 7.0.0.200。

我从数据库中选择一组记录。

该表有主键和另外 2 个备用键。我遇到问题的列 (SEQ_CD) 是备用键之一。它是一个smallint(2),不允许空值并且没有默认值。

我使用的API是.Net 7。

这是我的背景

            modelBuilder.Entity<MyClass>(e =>
            {
                e.ToTable("Table", "Schema");
                e.HasKey(k => k.Cd);
                e.HasAlternateKey(k => k.Dc);
                e.HasAlternateKey(k => k.SeqCd);

                e.Property(p => p.CD).HasColumnName("CD");
                e.Property(p => p.DT).HasColumnName("DT");
                e.Property(p => p.SEQ_CD).HasColumnName("SEQ_CD").HasColumnType("smallint(2)");
                e.Property(p => p.CD_DS).HasColumnName("CD_DS");

            });

我的班级是这样设置的:

namespace Project.Data.Db2.Models
{
    public partial class MyClass
    {
        public string Cd { get; set; }
        public DateTime fDt { get; set; }
        public short SeqCd { get; set; }
        [JsonConverter(typeof(TrimmedWhitespaceStringConverter))] //Used to trim the extra whitespace from the db2 character fields.
        public string CD_DS{ get; set; }
    }
}

根据以前的经验,我认为这是将类型从 Db2 转换为 .Net 的问题。我检查了数据类型转换表,并尝试了 Int16。我也尝试过 Short,因为这是我们正在用新项目更新的其他应用程序所使用的类型。

无论我保存什么值,当我检索该值时,SEQ_CD 都会返回 1。我已验证数据库中的值是否正确。此外,我还设置了 api 来转储生成的 linq,并且使用 linqpad 从 linq 生成 sql。当直接针对数据库运行时,这两个查询都会返回正确的值,并返回预期的结果集。我需要在我的上下文或课堂上添加一些内容吗?

蒂亚!

.net db2 .net-7.0
1个回答
0
投票

我终于能够使用 IBM.EntityFrameworkCore 提供程序生成上下文。一旦我这样做了,我就能够注释掉各个部分,直到我破坏它,然后将部分添加到我现有的部分,直到它起作用。

我了解到我的问题是备用键设置。

不能使用

.HasAlternateKey
,而必须这样做:

e.HasKey(k => new { k.Cd, k.Dt, k.SeqCd });

一旦我这样做了,它就会从我的 api 返回正确的值。

© www.soinside.com 2019 - 2024. All rights reserved.