Czy możliwe jest automatyczne zwiększenie właściwości, która nie jest kluczem podstawowym w Entity Framework? Co muszę to klasa, która ma identyfikator, ale również numer seryjny:Właściwość automatycznej inkrementacji bez klucza
public class Maintenance
{
[Key]
public int ID { get; set; }
public int GroupID { get; set; }
public int SerialNo { get; set; }
}
Mam indeks na GroupID
i SerialNo
z unikalnym stosunku, uniemożliwiając grupa może mieć taki sam numer seryjny dwukrotnie .
Co obecnie robię, sprawdzam w tej grupie .Max()
dla SerialNo
. Chciałbym jednak, żeby numer seryjny został automatycznie zwiększony. czy to możliwe?
Szukałem rozwiązania, ale o ile rozumiem, nie jest możliwe posiadanie dwóch automatycznych inkrementacji kolumn ze strukturą encji, a kolumną automatycznej inkrementacji zawsze będzie kolumna PK.
Czy istnieje sposób ustawienia automatycznej inkrementacji, czy jest lepsze rozwiązanie problemu niż użycie Max()
? Korzystanie z Max()
może teoretycznie wytworzyć 2 wartości, które są identyczne i spowoduje awarię programu podczas próby wstawienia (z powodu unikalnego indeksu).
Najpierw używam kodu.
Aby wyjaśnić: Chcę zachować identyfikator jako klucz podstawowy i obliczyć numer seryjny podczas wstawiania.
UPDATE:
Próbowałem za pomocą [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
na SerialNo
co skutkuje Entity Framework chce zmienić klucz podstawowy dla tej nieruchomości. Próbowałem również [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
, który próbuje wstawić NULL do kolumny SerialNo
, a [DatabaseGenerated(DatabaseGeneratedOption.None)]
, który próbuje wstawić 0, zasadniczo robi "nic".
WNIOSEK INFO:
Jest to przykład na to, jak tabela może wyglądać:
|_ID_|_GroupID_|_SerialNo_|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
| 4 | 1 | 3 |
| 5 | 2 | 2 |
Znalazłeś rozwiązanie tego? Mam to samo pytanie/problem ... – Mike
Nie, przepraszam, @Mike, którego nie zrobiłem. Nadal używam '.Max()' –