复合键实体框架中的自动递增 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|
------------------------
我知道我可以通过代码做到这一点,但我想知道是否有另一种方法可以做到这一点。
如果可以,请在数据库中使用触发器。
-- 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.