Wenn Sie eine Datenbank mit Entity Framework Code-First erstellen, kann ein Großteil des Datenbankmodells aus dem Code extrahiert werden. Fließende API und / oder Attribute können zur Feinabstimmung des Modells verwendet werden.
Was sind die Vor- und Nachteile von Fluent Api im Vergleich zu Datenanmerkungen? Mit anderen Worten: Auch wenn in bestimmten Situationen beide Methoden angewendet werden können, in welchen Fällen sollte sich eine Methode über die andere durchsetzen?
Antworten:
Alles, was Sie mit DataAnnotations konfigurieren können, ist auch mit der Fluent-API möglich. Das Gegenteil ist nicht der Fall. Unter dem Gesichtspunkt der Konfigurationsoptionen und der Flexibilität ist die Fluent-API also "besser".
Konfigurationsbeispiele (sicher keine vollständige Liste), die in der Fluent-API möglich sind, aber nicht mit DataAnnotations (soweit ich sehen kann):
Kaskadierende Löschvorgänge ausschalten:
.WillCascadeOnDelete(false)
Geben Sie den Namen der Fremdschlüsselspalte in der Datenbank an, wenn der Schlüssel in Ihrem Objektmodell nicht verfügbar ist:
.Map(conf => conf.MapKey("MyForeignKeyID"))
Feinabstimmung der Beziehungen, insbesondere in allen Fällen, in denen nur eine Seite einer Assoziation im Objektmodell verfügbar ist:
.WithMany(...)
,WithOptional(...)
,WithRequiredDependent(...)
,WithRequiredPrincipal(...)
Spezifikation der Vererbungszuordnung zwischen Objektmodell und Datenbanktabellen (Tabelle pro Hierarchie, Tabelle pro Typ, Tabelle pro Betonklasse):
.Map<TDerived>(Action<EntityMappingConfiguration<TDerived>> ...)
Bearbeiten: Microsoft betrachtet die Fluent-API als "erweiterte Funktion" (Zitat von hier ):
Aber meiner Meinung nach erreichen Sie die Grenzen von DataAnnotations sehr schnell (außer vielleicht bei extrem einfachen Objektmodellen). Wenn Sie Ihr Modell nicht mehr mit DataAnnotations optimieren können, müssen Sie als letztes die Standardzuordnungskonventionen befolgen (indem Sie Ihre Eigenschaften gemäß diesen Regeln benennen). Derzeit können Sie die Konventionen nicht überschreiben (nur deaktivieren; MS hat angekündigt, Konfigurationsoptionen für die Konventionen in zukünftigen EF-Versionen anzugeben). Wenn Sie sich jedoch beim Definieren Ihres Objektmodells nicht von den Zuordnungskonventionen zwingen lassen möchten, ist die Fluent-API Ihre einzige Option.
Das Erlernen der Fluent-API ist fast ein Muss. Die DataAnnotations sind ein Muss für einfache Anwendungen.
quelle
[Required]
Attribut einer Eigenschaft in einer ASP.NET MVC-Anwendung hinzufügen, wird es sowohl von EF als auch von MVC zu Validierungszwecken verwendet, da beide dieses Attribut verarbeiten können. MVC versteht die Fluent API-Konfiguration jedoch nicht. Wenn Sie also das Attribut entfernen undHasRequired
stattdessen in Fluent API verwenden, ist es für EF dasselbe, jedoch nicht für MVC. (Meiner Meinung nach sollten die Attribute unterschiedlich benannt worden sein, die Verwendung des DataAnnotations-Namespace aus verschiedenen Komponenten und für verschiedene Zwecke ist sehr verwirrend.)[DefaultValue()]
dass Fluent entweder nicht möglich ist.Fluent API
würde ich Ihre Implementierungslogik in IhrerDbContext
behalten und IhrePOCO
s sauber halten