2012-05-03 7 views
33

Wiem, że nie jest to najbardziej idealne rozwiązanie, ale muszę dodać pole automatycznego zwiększania do jednego z moich pierwszych obiektów kodu EF. Ta kolumna nie jest identyfikatorem Id, który jest przewodnikiem.Pole automatycznego przyrostu Entity Framework, które nie jest Id

Czy jest w ogóle dla mnie, aby zdefiniować pole automatycznego inkrementacji kodu, czy też samemu utworzyć kolumnę i zdefiniować w bazie danych DB, że automatyczna inkrementacja działa?

Odpowiedz

51

Możesz dodać adnotację do tej właściwości za pomocą DatabaseGenerated(DatabaseGeneratedOption.Identity). EF dopuszcza tylko jedną kolumnę tożsamości na tabelę.

+1

Widziałem DatabaseGeneratedOption.Identity ale tbh Byłem leniwy i nie czytałem w nim, właśnie założyłem, że to zrobiło tę kolumnę pole PKey. Dzięki, oddam to. – JamesStuddart

+0

Czy to nadal będzie działać z Multitenant Databases? – amd

+0

@Ahmad Nie zadziała, jeśli każdy lokator ma swoje własne nasiono – Eranga

6

Stary post, chciałbym podzielić się tym, co znalazłem z Entity Framework 6.1.3.

Utworzono prostą bibliotekę warstw danych przy użyciu C# i .NET Framework 4.6.1, dodano prostą klasę repozytorium/usługi, pierwszą klasę kontekstową kodu i skierowałem mój plik web.config do lokalnej bazy danych SQL Express 2014.

W klasie encji dodałem następujące konstruktora atrybutu do kolumny ID:

[Key] 
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public Guid Id { get; set; } 

Potem stworzył nową migrację, wpisując w Visual Studio 2015 Package Manager:

Dodaj migracji

Nadaj nazwę migracji, a następnie poczekaj na utworzenie klasy DbMigtation. Edytować klasę i dodaj następujący CreateTable operacji:

CreateTable(
"dbo.Article", 
    c => new 
    { 
     Id = c.Guid(nullable: false, identity: true), 
     Title = c.String(), 
     Content = c.String(), 
     PublishedDate = c.DateTime(nullable: false), 
     Author = c.String(), 
     CreateDate = c.DateTime(nullable: false), 
    }) 
    .PrimaryKey(t => t.Id); 
} 

Powyższa tabela jest przykładem kluczowym punktem jest tu następujący budowniczy adnotacja:

nullable: false, identity: true 

Mówi EF do specifiy kolumnę jak nie nullabe i chcesz ustawić go jako kolumnę tożsamości, która zostanie zasiane przez EF.

uruchomienie migracji ponownie polecenia:

update-database 

ten będzie wykonany klasę migracji najpierw spada w tabeli (metoda dół()), a następnie tworzenie tabeli (na() metoda).

Przeprowadź testy jednostek i/lub połącz się z bazą danych i uruchom zapytanie wyboru, powinieneś zobaczyć swoją tabelę w nowym formularzu, dodać dane wyłączając kolumnę Id, a powinieneś zobaczyć nowe Guid (lub dowolny wybrany typ danych) do wygenerowania.