Showing posts with label ADO.NET Entity Framework. Show all posts
Showing posts with label ADO.NET Entity Framework. Show all posts

2009-04-14

Practical Entity Framework for C#: Compiled Queries in Entity Framework

With any new technology, performance implications are important to consider. If you want to get the best performance from Entity Framework queries, you should use the Compile function of the CompiledQuery class. In this video, Todd Miranda demonstrates how to use compiled queries in the Entity Framework.

http://msdn.microsoft.com/en-us/vcsharp/dd565858.aspx

2009-04-05

EDMGen2 – Now with Reverse Engineering options

Visual Studio 2008 and .Net 3.5 SP1 come with two tools that are capable of supporting a database-first application design scenario: the EdmGen command-line tool and the New ADO.Net Entity Model item template. These two tools produce Entity Framework metadata artifacts from a database instance, but the generated model and mapping have a one-to-one correspondence with the database. Any inheritance or partitioning relationships that may be naturally present in the schema or data of that instance are not represented in the generated model.

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

Since the release of the Entity Framework, we have received a number of requests for details and best practices from customers who are looking at migrating their LINQ to SQL based applications to the Entity Framework. In order to address this topic, we are beginning a new series of blogs posts that will look at various aspects of migration.

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.

image

Schritt 2: Als Nächstes benötigen wir ein Entity Model-File. Project - Add New Item auswählen.

image

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.

image

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.

image

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.

image

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.

image

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.

image

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.

image

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).

image

Anschliessend mit Finish-Button können wir unseren Wizard beenden.

image

Als Resultat erhalten wir unseren Entity Data Model mit drei Entities (ProductCategory > ProductSubCategory > Product).

image

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();
}
}
}
}

In der folgende Zeile werden die Sub-Kategorien einer Produkt-Kategorie mit Hilfe der Where-Operators selektiert und ausgegeben.

foreach(ProductSubcategory psc in db.ProductSubcategory.Where(p => p.ProductCategory.ProductCategoryID == pc.ProductCategoryID))
{
Console.WriteLine("ProductSubCategory: " + psc.Name);

...
}


Jetzt können wir unseren Code mit F5 kompilieren. Die Ausgabe sieht wie folgt aus:

image

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?

How do I use Entity Client?

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.

Step001 - Add New Project - ASP.NET Web Application

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.

Step002 - Add New Item - ADO.NET Entity Data Model

Schritt 2a: Entity Data Model Wizard-Dialog

Im Wizard "Generate from database"-Element auswählen.

Step002a - Entity Data Model Wizard - Generate from database

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.

Step002b - Choose Your Data Connection

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.

Step002c - Choose Your Database Objects

Als Resultat erhalten wird unser AdventureWorks-Model mit der CountryRegion-Entity Klasse (Entity Class)

Step002d - AdventureWorksModel - CountryRegion Entity

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).

Step003 - EntityDataSource

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.

Step003a - EntityDataSource - Configure Data Source

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.

Step003b - EntityDataSource - ConnectionString

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.

Step003c - EntityDataSource - Error - DefaultContainerName

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:

Step003ca - EntityDataSource - Error - DefaultContainerName - Correction

Die "*" müssen mit dem Projektnamen (Project name) bzw. Assemlby-Namen (Assembly name) ersetzt werden.

Step003cb - EntityDataSource - Error - DefaultContainerName - Correction

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.

Step003d - EntityDataSource - DefaultContainerName

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.

Step003e - EntityDataSource - Configure Data Selection

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.

Step004 - DataGridView

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.

Step004a - DataGridView - Choose Data Source

Unser GridView-Control wie folgt aus:

Bitte hier auch die Optionen Enable Paging, Enable Sorting, Enable Editing, Enable Deleting und Enable Selection auch ankreuzen.

Step004b - DataGridView - GridView Tasks

Jetzt können wir unser Beispiel-Projekt mit F5 starten.

Wenn bei euch auch die "Debugging Not Enabled"-Meldung erscheint, einfach mit OK weitermachen.

Step005 - Run - Modify the Web.config file to enable debugging

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.

Step006 - Default.aspx in Internet Explorer

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.