Ist es möglich, eine Eigenschaft automatisch zu inkrementieren, die nicht der Primärschlüssel in Entity Framework ist? Was ich habe, ist eine Klasse, die eine ID hat, sondern auch eine Seriennummer:Autoinkrement-Eigenschaft nicht Schlüssel
public class Maintenance
{
[Key]
public int ID { get; set; }
public int GroupID { get; set; }
public int SerialNo { get; set; }
}
Ich habe einen Index für GroupID
und SerialNo
mit einer einzigartigen Beziehung, was es unmöglich macht für eine Gruppe die gleiche Seriennummer haben zweimal .
Was ich gerade mache, überprüft .Max()
für SerialNo
innerhalb dieser Gruppe. Ich würde es aber gerne, wenn die Seriennummer automatisch inkrementiert würde. Ist das möglich?
Ich habe nach einer Lösung gesucht, aber soweit ich es verstehe, ist es nicht möglich, 2 automatisch inkrementierende Spalten mit Entitätsrahmen zu haben, und die automatisch inkrementierende Spalte wird immer die PK-Spalte sein.
Gibt es eine Möglichkeit, das automatische Inkrement einzustellen, oder gibt es eine bessere Lösung für das Problem als Max()
? Die Verwendung von Max()
kann theoretisch zwei Werte ergeben, die identisch sind und beim Versuch, das Programm einzufügen (aufgrund des eindeutigen Index), zum Absturz des Programms führen.
Ich verwende Code zuerst.
Um zu verdeutlichen: Ich möchte die ID als Primärschlüssel behalten und die Seriennummer beim Einfügen berechnen.
UPDATE:
Ich habe versucht mit [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
auf SerialNo
, die in Entity Framework Ergebnisse wollen die Primärschlüssel, um diese Eigenschaft zu ändern. Ich versuchte auch [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
, die versucht, NULL in die SerialNo
Spalte und [DatabaseGenerated(DatabaseGeneratedOption.None)]
, die versucht, 0 einzufügen, im Grunde tun "nichts".
BEANTRAGT INFO:
Dies ist ein Beispiel dafür, wie die Tabelle aussehen könnte:
|_ID_|_GroupID_|_SerialNo_|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
| 4 | 1 | 3 |
| 5 | 2 | 2 |
Haben Sie eine Lösung für dieses finden benutzen? Ich habe die gleiche Frage/Problem ... – Mike
Nein, sorry @ Mike tat ich nicht. Ich benutze immer noch '.Max()' –