2017-05-16 8 views
0

基本的に私はこのような何かをしたい:EFコア複合キーAUTO_INCREMENT二列

+----+------+-----+ 
| Id | Name | Ver | 
+----+------+-----+ 
| 1 | Foo | 1 | 
| 2 | Foo | 2 | 
| 3 | Bar | 1 | 
| 4 | Baz | 1 | 
+----+------+-----+ 

各オブジェクトには、バージョンが割り当てられています。バージョン番号はDBによって自動インクリメントされます。

u.HasKey(x => x.Id); 
u.HasKey(x => new { x.Name, x.Ver }); 
u.Property(x => x.Ver) 
    .ValueGeneratedOnAdd(); 

及びその

u.HasKey(x => new { x.Name, x.Ver, x.Id }); 

および変形を:自然に各新しいバージョンのオブジェクトのために、バージョン番号は、私が試した1

にリセットする必要があります。

私に何が欲しいかわからない。新しい名前付きエントリを追加するたびに、Verは増分を維持します。

+1

これはできません。値の生成はEFコアで2つの方法で行われます。クライアント値ジェネレータを提供するか、データベースを設定して値を生成します。データベースを自動インクリメントに設定する方法を考えることができますが、新しいバージョン名でリセットする場合は、私たちに知らせてください。私はそのためにデータベースを設定する方法を提供することができます。 – Smit

答えて

0

おそらくバージョンを既存の行のCount(*)に設定するトリガーですか?また、バージョン管理の際に、バージョン番号が正確に従うことが本当に必要なのでしょうか?ギャップがあれば、それは本当に問題ではないはずです。行に新しいバージョンまたはそれ以前のバージョンがあるかどうかを知りたい場合は、より大きいか小さいバージョン番号の行を確認してください。

+0

ありがとう、私はこれが私がやり遂げることだと思います。それでもコードにしか解決策がないかどうかを知りたいでしょう:) – Mardoxx

+0

EFでは、データベースに送信される前に、コード内の更新と挿入をインターセプトできます。あなたはフィールドを更新することができます。しかし、同じバージョン番号の行に終わるところでは、同じアプリケーションで異なるアプリが同時にテーブルに書き込んでいるので、それに反してアドバイスします。 –