复合密钥实体框架中的自动增量ID

时间:2015-06-10 15:54:25

标签: c# entity-framework entity-framework-6

我有两个类似的

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|
------------------------

我如何在Entity Framework中执行此操作

非常感谢你的帮助

编辑:其实我有这个,但我只想要增加ID,如我所说:

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

我知道我可以通过代码完成,但我想知道是否还有其他方法可以做到。

1 个答案:

答案 0 :(得分:1)

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

-- 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.