2009-04-14
Practical Entity Framework for C#: Compiled Queries in Entity Framework
http://msdn.microsoft.com/en-us/vcsharp/dd565858.aspx
2009-04-05
EDMGen2 – Now with Reverse Engineering options
The new version of EdmGen2, recently released on Code Gallery, includes an option “RetrofitModel”. This extension is the result of collaboration with the database team at Microsoft Research, notably summer intern Ankit Malpani. When using this option, EdmGen2 uses data mining techniques to determine if there are TPH, TPT, or vertical partitioning relationships that are inherent in the instance. It then generates a suitable model and mapping in the form of csdl, msl, ssdl, and edmx files. The following figure illustrates one of the patterns that EdmGen2 looks for in an instance, and the resulting model:
...
http://blogs.msdn.com/adonet/archive/2009/04/04/edmgen2-now-with-reverse-engineering-options.aspx
2008-10-08
Migrating from LINQ to SQL to Entity Framework: Eager Loading
This first post in the series covers Eager Loading in LINQ to SQL, and the steps for migrating to equivalent constructs in the Entity Framework in .NET 3.5 SP1. Subsequent posts will cover Deferred Loading, LINQ specifics, concurrency, mapping, stored procedure support, and other topics. As we continue to approach the next release of the Entity Framework we will revisit how some of the new features aid in migration.
http://blogs.msdn.com/adonet/archive/2008/10/07/migrating-from-linq-to-sql-to-entity-framework-eager-loading.aspx
2008-08-21
ADO.NET Entity Framework - Erstellen eines Entity Data Models mit Visual Studio 2008 und SQL Server 2008
Dieser Beitrag beschreibt mit einer Step-by-Step Einleitung die Erstellung eines Entity Models mit Visual Studio 2008 und SQL Server 2008.
Für das folgende Beispielprojekt wird Visual Studio 2008 mit SP1 (Service Pack 1) und SQL Server 2008 mit Adventure Works-Datenbank benötigt.
Schritt 1: Als Erstes erstellen wir ein neues Projekt:
Im Visual Studio 2008 - File - New - Project auswählen. Als Projekttyp wählen wir Console Application. Projektname-Projectname EntityFrameworkSample0010 definieren.
Schritt 2: Als Nächstes benötigen wir ein Entity Model-File. Project - Add New Item auswählen.
Schritt 2a: Und anschliessend ADO.NET Entity Data Model auswählen und AdventureWorks.edmx als Filename eingeben. Es ist üblich, dass der Datenbankname als Entity Data Model-Name verwendet wird.
Schritt 2c: Nach dem wir Add-Button geklickt haben, wir der Entity Data Model Wizard. In diesem Wizard können wir auswählen, ob wir aus einer bestehenden Datenbank unser Entity Data Model erstellen möchten (Generate from database) oder ob wir ein leeres Entity Data Model-File benötigen (Empty Model).
Für unser Beispiel selektieren wir Generate from database und dann mit Next-Button weitermachen.
Schritt 2d: Damit der Wizard die Metadaten-Meta Data für unser Entity Data Model aus der Datenbank lesen kann, benötigen wir eine Datenbankverbindung-Database Connection. In der Auswahlliste werden die Datenbankverbindungen angezeigt, die im Server Explorer-Fenster auch aufgelistet werden.
Für eine neue Datenbankverbindung New Connection-Button klicken oder die Datenbankverbindung für AdventureWorks-Datenbank auswählen.
Schritt 2e: Wenn wir mit New Connection weitermachen, dann erscheint ein Dialog (Choose Data Source), in dem wir den Data Provider auswählen können.
Schritt 2f: In diesem Dialog benötigen wir die Angaben zum SQL Server und Datenbank.
Als Server name müssen wir den Instanznamen-Instance name unseren SQL Server 2008 angeben. Zusätzlich müssen wir definieren, ob wir Windows Authentication oder SQL Server Authentication für die Anmeldung an SQL Server verwenden möchten. Nach dem wir Instanznamen und Authentication-Angaben definiert haben, können wir die Datenbank auswählen.
Schritt 2g: Nach dem wir die Informationen über unser Datenbankserver und Datenbank definiert haben, werden die Angaben nochmals im folgenden Dialog angezeigt.
Im Feld Entity connection string sehen wir die Entity Data Model Spezifisches Information, die ich in einem späteren Blog-Eintrag im Detail erklären werde. In dem unteren Feld sehen wir den Namen des App.Config Eintrages.
Als Nächstes müssen wir den Inhalt unseren Entity Data Models definieren.
Schritt 3: In diesem Schritt wählen wir die Datenbanktabelle für unser Entity Data Model aus. Für das aktuelle Beispiel-Projekt benötigen wir nur drei Tabellen (Product, ProductCategory, ProductSubCategory).
Anschliessend mit Finish-Button können wir unseren Wizard beenden.
Als Resultat erhalten wir unseren Entity Data Model mit drei Entities (ProductCategory > ProductSubCategory > Product).
Nach dem wir unseren Entity Data Model erstellt haben, können wir die Daten aus der Datenbank lesen und ausgeben.
Schritt 4: Wir ergänzen den bereits erstellten Console Application-Code wie folgt:
Der folgende Beispielcode listet alle Produkt-Kategorien (Product categories), die Sub-Kategorien (Product sub categories) und die Produkten (Products) auf.
using System;
using System.Linq;
namespace EntityFrameworkSample0010
{
class Program
{
static void Main(string[] args)
{
using (AdventureWorks2008Entities db = new AdventureWorks2008Entities())
{
foreach(ProductCategory pc in db.ProductCategory)
{
Console.WriteLine("ProductCategory: " + pc.Name);
foreach(ProductSubcategory psc in db.ProductSubcategory.Where(p => p.ProductCategory.ProductCategoryID == pc.ProductCategoryID))
{
Console.WriteLine("ProductSubCategory: " + psc.Name);
foreach (Product p in db.Product.Where(pp => pp.ProductSubcategory.ProductSubcategoryID == psc.ProductSubcategoryID))
{
Console.WriteLine("Product: " + p.Name);
}
Console.WriteLine();
}
Console.WriteLine();
}
Console.ReadLine();
}
}
}
}
foreach(ProductSubcategory psc in db.ProductSubcategory.Where(p => p.ProductCategory.ProductCategoryID == pc.ProductCategoryID))
{
Console.WriteLine("ProductSubCategory: " + psc.Name);
...
}
Für Fragen zu diesem Thema bin ich für Euch über die Kommentar-Funktionalität erreichbar.
Viel Spass...
2008-05-24
ADO.NET Entity Framework - How Do I - Videos
ADO.NET Team hat auf ihrem Blog mehrere Videos zum Thema ADO.NET Entity Framework veröffentlicht.
Für eine Einführung in das Thema Entity Framework kann euch diese Videos emfehlen:
How Do I Get Started with the Entity Framework?
How Do I Use the new Entity Data Source?
How Do I Serialize a Graph with the Entity Framework?
Viel Spass...
2008-05-18
ADO.NET Entity Data Model und EntityDataSource in Visual Studio 2008
In diesem Beitrag möchte ich mit einer Step-by-Step Anleitung euch zeigen, wie wir einfach und schnell eine einfache ASP.NET Web Application-Anwendung erstellen mit der wir die Daten in einer Datenbanktabelle anzeigen und bearbeiten können.
Dabei werde ich mit Visual Studio 2008 Service Pack 1 Beta veröffentliche ADO.NET Entity Model und EntityDataSource Komponente (Component) als Datenbank-Schnittstelle verwenden.
Schritt 1: Ein neues ASP.NET Web Application Projekt erstellen
Visual Studio 2008 starten und Menü Eintrag File - New Project auswählen.
Anschließend Visual C# - ASP.NET Web Application Template auswählen und EntityDataSourceSample0002 als Projektname definieren.
Schritt 2: Als nächstes Erstellen wir eine ADO.NET Entity Data Model-Klasse
Mit Hilfe des Project - Add Component Menü Eintrag den Auswahl-Dialog für Projekt-Elemente starten.
Im Dialog ADO.NET Entity Data Model-Element auswählen und AdventureWorks.edmx als Name definieren.
Schritt 2a: Entity Data Model Wizard-Dialog
Im Wizard "Generate from database"-Element auswählen.
Schritt 2b: Datenbank-Verbindung (Database connection)
In diesem Dialog definieren wir die Datenbank-Verbindung (Database connection). Zusätzlich wird auch der Name des Web.Config-Eintrages für die ConnectionString definiert.
In dem folgenden Beispiel wird ein SQL Server 2008 mit der AdventureWorks-Datenbank verwendet und der Eintrag im Web.Config-File heißt AdventureWorksEntitites.
Schritt 2c: Datenbank-Objekt (Database object) auswählen
Erst hier definieren wir, welche Datenbank-Tabelle(n) (Database table(s)) für unser Model relevant sind.
In dem folgenden Beispiel wird nur die CountryRegion-Tabelle ausgewählt. Zusätzlich wird der Name für den Model Namespace definiert. Im Beispiel wird AdventureWorksModel als Namespace verwendet.
Als Resultat erhalten wird unser AdventureWorks-Model mit der CountryRegion-Entity Klasse (Entity Class)
Schritt 3: EntityDataSource-Komponente (Component)
In diesem Schritt werden wir die EntityDataSource-Komponente in unsere Seite einbinden und Konfigurieren.
Wir wechseln in das Design-Modus des Default.aspx-Elements. Einfach Solution Explorer auswählen und auf das Default.aspx-Element doppelklicken.
Im Toolbox unter dem Abschnitt Data sehen wir unseren EntityDataSource-Komponente (Component).
Mit Drag & Drop die EntityDataSource-Komponente (Component) auf das Default.aspx-Element ziehen und los lassen.
Schritt 3a: EntityDataSource - DataSource-Eigenschaft konfigurieren (Configure Data Source)
Als nächstes werden wir die DataSource-Eigenschaft der EntityDataSource-Komponente konfigurieren. Für die Konfiguration kann der Eintrag Configure Data Source (wie im untenstehenden Bild ersichtlich) ausgewählt werden.Schritt 3b: ObjectContext-Konfigurieren (Configure ObjectContext)
Die ConnectionString und DefaultContainerName Informationen werden im folgenden Dialog definiert."Die Beta 1 des Visual Studio 2008 Service Packs hat leider einen Fehler (Bug). Ich werde euch zeigen, wie man diesen Fehler umgehen kann."
Namen Connection markieren und den Eintrag AdventureWorksEntities auswählen.
Wenn wir versuchen, den DefaultContainerName-Eigenschaft zu definieren, dann erhalten wir folgenden Fehlermeldung (Fehler (Bug) in Visual Studio 2008 ServicePack 1 Beta): The Entity Data Model metadata specified in the connection string could not be loaded due the following error(s): Unable to load specified metadata resource.
Schritt 3c: Fehler (Bug) Korrektur
Die Fehlermeldung mit OK bestätigen und den Wizard mit Cancel abbrechen.
In der Web.Config-Datei wurde im Abschnitt ConnectionString ein falscher Eintrag verursacht diesen Fehler:
Die "*" müssen mit dem Projektnamen (Project name) bzw. Assemlby-Namen (Assembly name) ersetzt werden.
Die Datei speichern und neu KOMPILIEREN (Build).
Anschließend nochmals zurück auf das Design-Modus der Default.aspx-Seite wechseln und den EntityDataSource-Element konfigurieren (siehe Schritt 3a).
Schritt 3d: DefaultContainerName auswählen
Als DefaultContainerName den Eintrag AdventureWorksEntites auswählen.
Schritt 3e: Daten-Selektion konfigurieren (Configure Data Selection)
In diesem Schritt definieren wir, welche Funktionalitäten für unsere CountryRegion-Klasse zur Verfügung stellen soll.
Gemäß folgende Bild die Einstellungen vornehmen und den Dialog mit Finish abschließen.
Schritt 4: GridView-Element für die Datenanzeige und Bearbeitung
Für die Anzeige und Bearbeitung der Daten benötigen wir ein GridView-Element. Einfach ein neues GridView-Element mit Drag & Drop auf die Default.aspx-Seite ziehen.
Schritt 4a: GridView DataSource-Eigenschaft (Property)
Als nächstes konfigurieren wir die Data Source-Eigenschaft (Property) des GridView-Controls. Als Data Source den EntityDataSource1-Eintrag auswählen.
Unser GridView-Control wie folgt aus:
Bitte hier auch die Optionen Enable Paging, Enable Sorting, Enable Editing, Enable Deleting und Enable Selection auch ankreuzen.
Jetzt können wir unser Beispiel-Projekt mit F5 starten.
Wenn bei euch auch die "Debugging Not Enabled"-Meldung erscheint, einfach mit OK weitermachen.
Nach eine "einbißchen lange" Wartezeit sehen wir in unserem Browser (in meinem Beispiel Internet Explorer) die Default.aspx-Seite mit GridView und die CountryRegion-Daten.
Das Beispielprojekt findet ihr unter: EntityDataSourceSample0002
Viel Spaß beim ausprobieren.
Für Feedbacks über die Kommentar-Funktionalität wäre ich dankbar, ob das Beispiel-Projekt bei euch auch funktioniert hat.