复合键实体框架中的自动递增 ID

本文关键字:ID 实体 框架 复合 | 更新日期: 2023-09-27 17:55:23

>我有两个这样的类

public partial class Master
{
        [Key, Column(Order = 0)]
        public int idmaster { get; set; }
       /*More fields*/
}

public partial class Detail
{
        [Key, Column(Order = 0)]
        public int idmaster { get; set; }
        [Key, Column(Order = 1)]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int id { get; set; }
}

我想以这种方式自动递增 ID:

|----------|-----------|
|MasterID  | ID        |
------------------------
|         1|          1|
|         1|          2|
|         1|          3|
|         1|          4|
|         2|          1|
|         2|          2|
|         2|          3|
|         2|          4|
------------------------

如何在实体框架中执行此操作

非常感谢您的帮助

编辑:实际上我有这个,但我只想要我提到的增量ID:

|----------|-----------|
|MasterID  | ID        |
------------------------
|         1|          1|
|         1|          2|
|         1|          3|
|         1|          4|
|         2|          5|
|         2|          6|
|         2|          7|
|         2|          8|
------------------------

我知道我可以通过代码做到这一点,但我想知道是否有另一种方法可以做到这一点。

复合键实体框架中的自动递增 ID

如果可以,请在数据库中使用触发器。

-- TSQL in SQL Server 2008+
CREATE TRIGGER tr_Detail_autoidentity ON Detail
INSTEAD OF
INSERT
AS
BEGIN
  INSERT INTO Detail(idmaster, id) 
  SELECT inserted.idmaster, isnull((SELECT max(id) FROM Detail WHERE idmaster = inserted.idmaster), 0) +  ROW_NUMBER() OVER (PARTITION BY idmaster ORDER BY id) 
FROM inserted
END
--I Love this one, it work for multiline insert. May need a lock for multiuser, I'm not sure.