In einem EF 4.1 Code First Tutorial wird der folgende Code angegeben:
public class Department
{
public int DepartmentId { get; set; }
[Required]
public string Name { get; set; }
public virtual ICollection<Collaborator> Collaborators { get; set; }
}
Dann wird erklärt, dass das flüssige Interface flexibler ist:
Datenanmerkungen sind auf jeden Fall einfach zu verwenden, es ist jedoch vorzuziehen, einen programmgesteuerten Ansatz zu verwenden, der viel mehr Flexibilität bietet.
Das Beispiel für die Verwendung der flüssigen Schnittstelle wird dann gegeben:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Department>().Property(dp => dp.Name).IsRequired();
modelBuilder.Entity<Manager>().HasKey(ma => ma.ManagerCode);
modelBuilder.Entity<Manager>().Property(ma => ma.Name)
.IsConcurrencyToken(true)
.IsVariableLength()
.HasMaxLength(20);
}
Ich kann nicht verstehen, warum das fließende Interface angeblich besser ist. Ist das wirklich? Aus meiner Sicht sieht es so aus, als wären die Datenanmerkungen klarer und hätten ein klareres semantisches Gefühl.
Meine Frage ist, warum eine flüssige Benutzeroberfläche eine bessere Option ist als die Verwendung von Attributen, insbesondere in diesem Fall.
(Hinweis: Ich bin ziemlich neu im Bereich der fließenden Benutzeroberflächen. Erwarten Sie daher bitte keine Vorkenntnisse.)
Referenz: http://codefirst.codeplex.com/
quelle
Antworten:
Datenanmerkungen sind statisch. Diese Methodendeklaration kann beispielsweise zur Laufzeit nicht geändert werden:
Das flüssige Interface kann dynamisch sein:
Ganz zu schweigen davon, dass der Code zwischen Eigenschaften wiederverwendet werden kann.
quelle
Ich denke nicht, dass diese Aussage allgemein angewendet werden sollte; es ist sehr spezifisch für Code First. In Code First enthalten Datenanmerkungen nur eine Teilmenge der Funktionen, die in der Fluent-API verfügbar sind. Mit anderen Worten, es gibt bestimmte Modellkonfigurationen, die nur mit der flüssigen API durchgeführt werden können.
Zum Beispiel sind hier einige der Dinge, die mit den Annotationen nicht angegeben werden können:
Persönlich verwende ich die validierungsbezogenen Datenkommentare, wann immer dies möglich ist, da auch andere Technologien wie MVC diese nutzen können. Für alles andere bevorzuge ich die flüssige API.
quelle
Die Antwort auf Ihre Frage finden Sie im Link.
Grundsätzlich ist es mehr oder weniger bevorzugt, Attribute im Vergleich zum programmatischen Ansatz zu verwenden, bei dem der programmatische Ansatz mehr Kontrolle über die Entität hat. Es gibt jedoch eine benutzerdefinierte Methode zum Hinzufügen von Attributen, um Ihr Modell so zu dekorieren, dass Sie auch aussehen können.
Doch für allgemeine Szenarien der Validierung Anwendung Attribute sollten funktionieren , weil es robust ist die meisten Fälle zu decken; Außerdem können Sie Zeit sparen.
quelle
Meiner Meinung nach empfehlen sie die fließende API für Code-First-Implementierungen, da Sie explizit beschreiben, wie die Beziehungen in der Datenbank erstellt werden. Wenn Sie Datenanmerkungen verwenden, entspricht die von Entity Framework erstellte Datenbank möglicherweise nicht Ihren Erwartungen. Ihr erstes Beispiel ist sehr einfach, daher würde ich wie Sie nur die Datenanmerkungsmethode verwenden.
quelle