Nie mogę znaleźć sposobu na dodanie unikalnego ograniczenia do mojego pola przy użyciu atrybutu:
public class User
{
[Required]
public int Id { get; set; }
[Required]
// [Index("IX_FirstAndSecond", 2, IsUnique = true)] not supported by core
public string Email { get; set; }
[Required]
public string Password { get; set; }
}
Używam tych pakietów:
"Microsoft.EntityFrameworkCore": "1.0.1",
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.1",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.1",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
c#
entity-framework
entity-framework-core
Vadim M.
źródło
źródło
Odpowiedzi:
W EF core nie można tworzyć indeksów przy użyciu adnotacji danych, ale można to zrobić za pomocą interfejsu API Fluent.
Jak to w twoim
{Db}Context.cs
:... lub jeśli używasz przeciążenia z buildAction:
Więcej na ten temat przeczytasz tutaj: Indeksy
źródło
HasAlternateKey
Również jeśli chcesz utworzyć unikalne ograniczenia w wielu kolumnach, możesz po prostu to zrobić (podążając za linkiem @ Sampath )
źródło
Rozwiązanie dla EF Core
Tablica DB będzie wyglądać następująco:
Odwołaj się do dokumentów EF Core
źródło
If you just want to enforce uniqueness of a column then you want a unique index rather than an alternate key. In EF, alternate keys provide greater functionality than unique indexes because they can be used as the target of a foreign key.
OP pyta, czy możliwe jest dodanie atrybutu do klasy jednostki dla unikalnego klucza. Krótka odpowiedź jest taka, że JEST to możliwe, ale nie jest to standardowa funkcja zespołu EF Core. Jeśli chcesz użyć atrybutu, aby dodać unikalne klucze do klas encji Entity Framework Core, możesz zrobić to, co tutaj opublikowałem
źródło
Dla kogoś, kto wypróbowuje wszystkie te rozwiązania, ale nie działa, wypróbuj to, zadziałało
źródło
Aby użyć go w rdzeniu EF za pośrednictwem konfiguracji modelu
źródło
Żadna z tych metod nie działała dla mnie w .NET Core 2.2, ale byłem w stanie dostosować kod, który miałem do zdefiniowania innego klucza podstawowego, aby działał w tym celu.
W poniższym przypadku chcę się upewnić, że pole OutletRef jest unikalne:
Spowoduje to dodanie wymaganego unikalnego indeksu w bazie danych. Jednak to nie zapewnia możliwości określenia niestandardowego komunikatu o błędzie.
źródło
Możemy dodać unikalny indeks klucza za pomocą Fluent API. Poniższy kod zadziałał dla mnie
źródło