为什么 Telerik ORM 会将 SQL Server 数据库列的值增加 10?

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

我正在开发一个 SQL Server 数据库,其中我的一个表有一列,其值似乎一次增加 10。

该列(称为

Customer.Object_id
)是主键(如 Microsoft SQL Server Management Studio 中所示),但我不认为增加 10 是由 SQL Server 处理的,因为当我使用“编辑“用于创建新元组的功能,我收到填写该特定列的请求,因此应该由其他东西处理。

这是 SQL Server 中的定义:

作为一个 ORM,我使用 Telerik,所以我猜这个应该负责,但我没有看到它。映射配置如下所示:

private MappingConfiguration<CustomerObj> CreateCustomerObjMapping()
{
    var mapping = new MappingConfiguration<CustomerObj>();
    mapping.FieldNamingRules.CaseMode = Telerik.OpenAccess.Metadata.CaseChangeModes.CamelCase;
    mapping.FieldNamingRules.AddPrefix = "_";
    mapping.MapType(o => new
    {
        o.Id,
        o.Name,
        o.BackgroundColor,
        // o.Code,
        o.ForegroundColor
    }).Inheritance(InheritanceStrategy.Vertical).ToTable(new TableName("Customer.Obj", string.Empty));

    mapping.HasDiscriminatorValue(typeof(CustomerObj).FullName);

    return mapping;
}

在这里,我没有看到任何关于增加10的提及,但我也不知道如何解释这个信息。

Id
专栏是一个正常的专栏(虽然应该是这个专栏,但正在为此处理 - 这是一个策略错误,是我的前任犯下的,我无法再更改)。

有人知道

Customer.Object_id
列中增加 10 的处理方式吗?

c# sql-server orm telerik telerik-open-access
1个回答
0
投票

看来 Telerik 可能已选择为您的实体使用其 HighLow 密钥生成机制。

HighLow - Telerik Data Access 始终需要将其持久类型与主键相关联。如果未提供此类信息,Telerik Data Access 将使用内部机制来创建 ID。

HighLow 生成器的默认 GrabSize10。据说这是通过代码或配置可配置的。

我目前无法对其进行测试 - 并且由于该产品已被弃用,因此文档几乎已经过时 - 但我怀疑如果您一次插入超过 1 个对象

在单个事务中,它们实际上可能具有连续的 ID。 (然后跳到接下来的 10 笔交易)

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