Entity-Framework

Um die Daten zu persistieren und als ORM-Framework haben wir uns für Entity-Framework (Version 6) entschieden.

Code-First

Code-First bietet die größten Freiheit bei der Erstellung der DALs daher auch unsere erster Wahl.

Models Erstellen

CompositePattern

Composite Pattern

Für die Erstellung der Model-Klassen nehmen wir die Datenstruktur der „Composite-Pattern“ her.

Hier wird der gemeinsame Basis-Klasse als Schnittstelle (Interface) verwendet um die Daten bereitzustellen bzw. entgegen zunehmen.

Bei der Einsatz der „Code-First“-Methode habe ich festgestellt, dass EF beim Speichern der Objekte darauf achtet , ob eine extra Tabelle für „Component“-Models erzeugt werden muss oder nicht.

Es hängt stark von den Datenbasis ab, ob jetzt weitere Klassen von „Composite“/“Leaf“-Abgeleitet werden oder jeweils eine neue Klasse erzeugt werden muss.

Datenbank-Context

Wenn der DAL(Data Access Layer) in ein externes Bibliothek erzeugt und definiert wird, Connection-String muss in alle config-files gespeichert werden.

 

Connection-String

Wird in Web- oder App-.Config Datei definiert und sieht wie folgt aus:
<connectionStrings>
<add name="SchoolContext" connectionString="Data Source=(localdb)MSSQLLocalDB;Initial Catalog=PROJECTCATALOG;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
</connectionStrings>

Hier wird auf dem lokalen sql-server ((localdb)MSSQLLocalDB) ein Catalog/Datenbank(PROJECTCATALOG) benutzt.

Datenbank Initialisieren

Hier geht’s darum den Datenbank jedes mal löschen und neu erstellen , wenn sich die Definition der Models sich ändert.

Hierfür erstellt man erst eine Klasse die von „System.Data.Entity.DropCreateDatabaseIfModelChanges“.
In diese Klasse überschreiben wir dann die Methode:“Seed“

public class ProjektDbContextInitializer: System.Data.Entity.DropCreateDatabaseIfModelChanges {
protected override void Seed(ProjektDbContext context) {
// Model-Objekte erzeugen und dem Context hinzufügen
// context.SaveChanges() aufrufen um die Daten zu speichern
}
}

Beziehungen

One-to-Many

Hierfür man definiert eine am besten virtuelle Collection in der Klasse:

class Composite: Component {
public virtual ICollection children {get; set;}
public Composite() {
children = new
}
}

One-to-One

Many-to-Many

 

Links(Intern):