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.