Wenn man schon eine WPF Anwendung mit einer lokalen
Datenbank vorhanden hat, dann geht man im Solution Explorer
Daten-Model Verbindung hinzufügen
Auf Projekt->Add->New Item
Add New Item
Installed->Visual C#->Data
ADO NET Entity Data Model
Obwohl man ja nur Entity Framework installieren will
Name: dbModel
Entity Data Model Wizard->
Choose Model Content
Hier Empfehlung: EF Designer from database
Creates a model in the EF Designer based on an existing database. You can choose the database connection, settings for the model, and database objects to include in the model. The classes your application will interact with are generated from the model. |
Entity Data Model Wizard->
Choose Your Data Connection
Unter Save connection settings in App.Config as
dbConnectionString
(als Vorschlag)
Entity Data Model Wizard
Choose Your Database Objects and Settings
Unter Tables ->dbo alle Tabellen markieren, welche von der Server Datenbank in das WPF Projekt übernommen werden sollen als Daten-Klassen oder Daten Model
Unter Model Namespace : dbModels für Datenbank db Models (Tabellen, Views Abfragen alles in der Struktur)
dbModels
Datenmodel im WPF Projekt
Dann sind alle Tabellen direkt in der Datenbank als Datenmodel vorhanden
Man findet die Tabellen und Abfragen im Daten-Model wie unter MVC Model
In der .edmx Datei.
Hier ist die Namensgebungung dbModel.edmx, abgeleitet von dem Model-View-Controller: Daten-Model der Datenbank
DBContext
Unter der Datei dbModel.Context.cs findet man nun die Datenbank-Connection als ConnectionsString und die Anbindung an das Datenmodel also lokale WPF Tabellen zur SQL Server Datenbank.
Das nennt man dann : DbContext (in WPF, Asp.Net MVC und .Core)
Den DbContext findet man in der Datei:
dbModel.edmx->dbModel.Context.ttt->dbModel.Context.cs
Automatisch erzeugte Verbindung dbContext
Die Benennung dbConnectionString benenne ich dann meistens um in die übliche Application_Database_Context oder hier App_DbContext
Hier im Projekt als
App_dbContextbenannt
{ using System; using System.Data.Entity; using System.Data.Entity.Infrastructure;
public partial class App_dbContext : DbContext { public App_dbContext() : base("name=dbConnectionString") { }
protected override void OnModelCreating(DbModelBuilder modelBuilder) { throw new UnintentionalCodeFirstException(); }
public virtual DbSet<tblBase_Abwesenheitsgruende> tblBase_Abwesenheitsgruende { get; set; } public virtual DbSet<tblBase_Feiertage> tblBase_Feiertage { get; set; } public virtual DbSet<tblBase_Maschinen> tblBase_Maschinen { get; set; } public virtual DbSet<tblBase_Mitarbeitergruppen> tblBase_Mitarbeitergruppen { get; set; } public virtual DbSet<tblBase_Schichtmodell> tblBase_Schichtmodell { get; set; } } }
|
Zugriff auf Daten und Tabellen
Durch die obere Verbindung hat man nun den kompletten einfachen Zugriff von WPF Anwendung auf die SQL Server Tabellen
So erstellt man einen Datenbank zugriff
Falls keine Verbindung von der WPF Anwendung zur SQL Server via Compact Database besteht, wird eine Connetion geöffnet
App_dbContext db = new App_dbContext(); if (db.Database.Connection.State == System.Data.ConnectionState.Closed || db.Database.Connection.State == System.Data.ConnectionState.Broken) await db.Database.Connection.OpenAsync();
|
So einfach greift man auf eine Tabelle zu
var data = db.tblBase_Feiertage.FirstOrDefault(); //id => id.IDFeiertag == 1 if (data == null) { .. } |
Und so einfach fügt man einen Datensatz zur Tabelle hinzu
//--< Add() >-- data = new tblBase_Feiertage(); data.Feiertag = "neu"; data.dtCreated = DateTime.Now; db.tblBase_Feiertage.Add(data); //--</ Add() >--
|
Datenzugriff als Code Beispiel in C#
Mit Linq
public async void load_Data() { App_dbContext db = new App_dbContext(); if (db.Database.Connection.State == System.Data.ConnectionState.Closed || db.Database.Connection.State == System.Data.ConnectionState.Broken) await db.Database.Connection.OpenAsync();
try { var data = db.tblBase_Feiertage.FirstOrDefault(); //id => id.IDFeiertag == 1 if (data == null) { //--< Add() >-- data = new tblBase_Feiertage(); data.Feiertag = "neu"; data.dtCreated = DateTime.Now; db.tblBase_Feiertage.Add(data); //--</ Add() >-- } else { ctlFeiertag.Text = data.F; //--< Update() >-- //data.dtEdit = DateTime.Now; //--</ Update() >-- } await db.SaveChangesAsync();
} catch (Exception ex) {
}
}
|