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

xlpyo6sf  于 2023-11-18  发布在  DB2
关注(0)|答案(1)|浏览(138)

我目前使用的是IBM. martyFrameworkCore Verson 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转换类型的问题。我已经检查了数据类型转换图表,我已经尝试了Int 16。我也尝试了短,因为这是我们正在更新的其他应用程序的类型。
不管我保存了多少值,当我检索该值时,它返回为SEQ_CD。我已经验证了数据库中的值是正确的。此外,我还设置了API以转储生成的linq,并使用linqpad从linq生成sql。当直接对数据库运行时,这两个查询都返回正确的值,并返回预期的结果集。是否需要添加某些内容我的背景还是我的课
TIA!

cclgggtu

cclgggtu1#

我终于能够使用IBM.martyFrameworkCore提供程序生成上下文了。一旦我这样做了,我就能够注解掉节,直到我打破它,然后向我现有的节添加节,直到它工作。
我发现我的问题是备用钥匙设置。
而不是使用.HasAlternateKey,它必须这样做:

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

字符串
一旦我这样做了,它就从我的API返回了正确的值。

相关问题