Wprowadzenie
W kilku poprzednich wpisach poruszaliśmy tematykę konwencji oraz różnych sposobów modelowania relacji. Jeżeli checie sobie przypomnieć wspomiane artykuły spójrzcie poniżej:
Do tej pory bazowaliśmy na domyślnych konwencjach. W tym wpisie dowiemy się jak konfigurować klasy domenowe w celu dostosowania modelu EF do (odpowiadającego nam) mapowania bazy danych. Podobnie jak w EF 6 do naszej dyspozycji zostały oddane dwa sposoby konfiguracji:
-
Atrybuty Data Annotation;
-
Fluent API.
Data Annotation
Data Annotation to prosta metoda konfiguracji oparta na użyciu różnych atrybutów dostępnych w .NET, które mogą być zastosowane do klas oraz właściwości celem skonfigurowania modelu.
Pewnie doskonale wiecie, że atrybuty o których tutaj mowa nie są dedykowane dla Entity Framework - są powszechnie używane w ASP.NET MVC. Atrybuty te pochodzą z przestrzeni nazw System.ComponentModel.DataAnnotations.
Jeżeli tworzyliście aplikacje webowe w oparciu o ASP.NET MVC poniższy przykład nie będzie dla Was zaskoczeniem (mam na myśli szeroko rozumianą walidację modelu: nakładanie różnych ogrniaczeń na poszczególne właściwości):
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace EFCoreCarDatabase.Model
{
[Table("NazwaTabeli")]
public class Person
{
[Key]
public int Id { get; set; }
[Column("FirstName", TypeName = "nvarchar")]
[MaxLength(20)]
public string FirstName { get; set; }
[Column("LastName")]
public string LastName { get; set; }
[NotMapped]
public int? Age { get; set; }
public int ClassesId { get; set; }
[ForeignKey("ClassesId")]
public virtual Classes Classes { get; set; }
}
}
Fluent API
Drugim sposobem (na który zwracaliście szczególną uwagę w ankiecie) jest konfiguracja z wykorzystaniem Fluent API. Jest to wzorzec projektowy w którym końcowy wynik (konfiguracja) jest osiągana przez łańcuch metod.
Temat ten jest niezwykle interesujący dlatego zostanie rozbity na kilka osobnych wpisów. W pierwszym z nich omówię czym tak naprawdę jest Fluent API a następnie przejdziemy do zamodelowania różnych relacji pomiędzy naszymi tabelami.