SQL Server TPH(每个层次结构表)根据类型自动递增多个列

时间:2018-03-09 12:17:18

标签: sql-server entity-framework auto-increment tph

我们目前在Entity Framework中使用TPT(Table Per Type),这非常慢,因为我们有大约20个表,当它们被查询时,Entity Framework会创建一些非常慢的大量伪装SQL。

每个表都有一个自动增量整数列,这允许每个类型都有一个每个类型递增的数字。这是客户想要的。现在我们想要转向性能更高的TPH,我们需要将所有这些表列移到一个表中。

我们如何根据下面的结果中的类型设置自动增量列?

e.g。

当前工作任务

| TaskId    | TaskNumber    |
-----------------------------
| 1234      | 1             |
| 2345      | 2             |

当前工作任务

| TaskId    | TaskNumber    |
-----------------------------
| 3244      | 1             |
| 3245      | 2             |

这是我们想要的TPH表结构,如您所见,我们希望任务编号根据任务类型递增。

| TaskId    | Type      | JobTaskNumber    | WorkTaskNumber   |
---------------------------------------------------------------
| 1234      | Job       | 1                | null             |
| 2345      | Job       | 2                | null             |
| 3244      | Work      | null             | 1                |
| 3245      | Work      | null             | 2                |

我想知道我们是否使用播种表,但任何解决方案都非常赞赏

非常感谢

安德鲁

1 个答案:

答案 0 :(得分:0)

好的,我认为可行。

不是一个非常好的方法,因为我们需要大约20个种子表。每个表只有一个在sql server中定义为BIGINT的身份ID

当我们想要添加并获得新增加的id时,我们只需使用dapper调用它来获得结果。

INSERT INTO SeedMyTable DEFAULT VALUES; SELECT CAST(SCOPE_IDENTITY() AS BIGINT)