2015-06-10 53 views
2

我有两个类像这些自动递增ID在复合键实体框架

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

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

+0

可以通过代码 –

+1

完成那是什么问题?数据库中是否正确设置了密钥? –

+0

我认为这是完全没用的。如果你开始使用有意义的ID值,它总会带来麻烦。首先,如果你想要它,你将永远无法改变它们的顺序(嗯,它根本不是微不足道的)。如果您需要显示任何序列号,请在运行时生成它们。 –

回答

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

我已经完成了代码,但这种方式也很棒。 – gabosl