8.8. Using Microsoft Entity Frameworks to Access MySQL Schema Objects with Virtuoso
This section details the steps required to provide Microsoft Entity Framework access to MySQL
Schema Objects using the OpenLink Virtuoso Universal Server. This is achieved by linking the required MySQL
Schema objects into Virtuoso using its built in Virtual Database engine, and then using the Virtuoso ADO.NET
Entity Framework provider to query the remote MySQL Schema objects linked into the Virtuoso Server.
Prerequisites
The following prerequisites must be in place for this solution to be possible.
MySQL DBMS
An MySQL DBMS hosting the required Schema Objects needs to be available. In this section
the Northwind sample database will be used to demonstrate the process.
ODBC Driver for MySQL
An MySQL ODBC Driver is required for Linking the MySQL Schema Objects into the Virtuoso Server.
The OpenLink ODBC Driver for MySQL will be used in this section, for which a
functional ODBC Data source name of "mysqlma" will be assumed to exist on the machine hosting the
Virtuoso Server.
Virtuoso Universal Server
An Virtuoso installation including the Virtuoso Universal Server and ADO.NET Entity
Framework Provider is required. The Virtuoso components used must be Release 5.10.x or above, this
being the minimum version containing support for Microsoft Entity Frameworks
Microsoft Visual Studio 2008 SP1
Microsoft Visual Studio 2008 Service Pack 1 is required, this being the only version
containing the necessary Entity Framework support available at the time of writing.
Tasks
Ensure MySQL Primary Keys (PKs) are not nullable
The Visual Studio 2008 Entity Data Model (EDM) requires that all primary keys are
NOT Nullable, and will fail to generate an EDM if any are. Thus ensure any tables
to be used are defined as not nullable in the MySQL database schema before attempting to generate an EDM.
In the case of the Northwind database all tables are not nullable, thus this should not be
an issue in this case.
8.8.1. Install and configure OpenLink ODBC Driver for MySQL
The Virtuoso Virtual Database engine uses ODBC as the connectivity mechanism for linking
remote database objects into its local schema. Thus an MySQL ODBC Driver must be available with a
suitably configured DSN for connecting to the target database. The OpenLink ODBC Drivers for MySQL
have been used in this section, although in theory any MySQL ODBC Driver can be used.
Installation instructions for the OpenLink ODBC Driver for MySQL are available from:
8.8.2. Install and configure OpenLink Virtuoso Universal Server
8.8.3. Linking MySQL tables into OpenLink Virtuoso
- Start the Virtuoso Web User Interface
- Select the "Conductor" link in the Left Frame and Login as the "dba" user.
- Select the "Databases" -> "External Data Source" -> "Data Sources" tab menu items
- Select the "Connect" button for the "mysqlma" MySQL DSN.
- On successful connection Select the "Link Objects" button to obtain a list of available tables
- Select all the tables that are part of the "mysql" catalog.
- Ensure a primary key is assigned to all table that are to be used in the EDM generation phase.
- Change the Catalog for each table to be "mysql" using the "Set All" button.
- Select the "Link" button to link the selected tables into Virtuoso
- On completion of the Link process the tables will be displayed in the "External Linked Objects" tab.
- The linked tables can be queried by clicking on the hyperlink in the "Local Name" column of the "External Linked Objects" tab above, which loads the Virtuoso "Interactive SQL" interface with the required SQL "Select" for retrieving the remote table data . We shall use the "mysql.mysqlma.artist" table to demonstrate this.
- Then click the "Execute" button to run the query and retrieve the results from the remote table.
- The tables can also be viewed as part of the Virtuoso "SQL Schema Objects" under the "mysql" catalog name.
8.8.4. Creating EDM in Visual Studio 2008
The following steps can be used to create an Entity Data Model (EDM) for the MySQL Northwind database:
- Launch the Visual Studio 2008 SP1 IDE.
- Create a Web Application project by going to the File
menu in Visual Studio and choosing New Project.
- When the New Project window appears, choose either Visual Basic or
Visual C# as your programming language.
- Within the language category, click on Web and select
ASP.NET Web Application from the right-hand panel.
- Choose a name for the project, for example VirtuosoDataService, and
click OK.
- This will create a new project called VirtuosoDataService.
- Select the Project -> Add New Item menu option.
- The Add New Item dialog will appear. Choose the
ADO.NET Entity Data Model template. Give it the name Virtuoso.edmx
and click Add to start the creation of the ADO.Net Entity Data Model.
- In the Entity Data Model Wizard dialog
Choose Model Contents page select the Generate from Database
model type and click Next.
- In the Entity Data Model Wizard dialog
Choose your Data Connection page, select the New Connection button
- In the Choose Data Source dialog, select the OpenLink
Virtuoso Data Source from the list and click Continue.
- In the Add Connection dialog, specify the
hostname, portno, username and password for the target Virtuoso
Server and check the Save Password check box.
- Select the Select Database From List radio button and choose the
mysql database from the drop down list.
- Press the Test Connection dialog to verify that the database is accessible.
- Click OK to add the connection.
- Set the entity connect string name to
VirtuosoEntities (note this name as it is required in the section on creating and
ADO.Net Data Service) and click Next.
- In the Choose your Database Objects page tick the
Tables check box to select all tables in the mysql catalog for addition to the
Entity Data Model. Set the Model Namespace to VirtuosoModel and
click Finish.
- The Virtuoso.edmx EDM will be created with the tables and relationships
displayed in the Visual Studio IDE
Creation for the Entity Data Model for the MySQL Northwind database is now complete.
8.8.5. Using EDM to create Entity Framework based applications
Now that a Microsoft Entity Data Model has been created for the Northwind database,
Entity Framework applications can be created to make use of it.
8.8.5.1. Entity Frameworks based ADO.NET Data Service
An ADO.Net Data Service for the MySQL tables can be created using the Entity Data Model
created in the Creating EDM in Visual Studio 2008 section.
- Open the VirtuosoDataService project created in the Creating EDM in Visual Studio 2008 section.
- Select the Project -> Add New Item menu option.
- The Add New Item dialog will appear. Choose the
ADO.NET Data Service template. Give it the name Virtuoso.svc, and
click Add to create the ADO.Net Data Service.
- In the newly created Virtuoso.svc.cs Data Service file, add the data source
class name of VirtuosoEntities (note this is the name set in the
Creating EDM in Visual Studio 2008 section) as the DataService name. Enable the access to the Data Service by adding the entry
config.SetEntitySetAccessRule("*", EntitySetRights.All); in the InitializeService method.
// C#
using System;
using System.Web;
using System.Collections.Generic;
using System.ServiceModel.Web;
using System.Linq;
using System.Data.Services;
namespace SimpleDataService
{
public class Northwind: DataService<VirtuosoDemoEntities>
{
public static void InitializeService(IDataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.All);
}
}
}
- To test the Data Service, simply hit Ctrl+F5 within Visual Studio. This
will start the development web server, run the Data Services server inside and load a Web browser
page displaying the list of available tables/entities for the mysql Northwind database catalog.
- To access a specific entity instance like the Customers table ALFKI record, use this convention: http://host/vdir/Virtuoso.svc/Customers('ALFKI') .
Notes:
-
Important - To view Atom (the default format
returned by an ADO.NET Data Service) in Internet Explorer, you must first ensure that
Feed Reading View is turned off. This can be done on the
Content tab of Tools in Internet Options.
- If a Data Services entity instance URI page fails to load you can turn Verbose
errors on by adding config.UseVerboseErrors = true; in the
virtuoso.svc.cs InitializeService method to obtain more detailed information from the server as to why the page failed to load:
public static void InitializeService(IDataServiceConfiguration config)
{
config.UseVerboseErrors = true;
config.SetEntitySetAccessRule("*", EntitySetRights.All);
}
8.8.5.2. Visual Studio Windows DataGrid Form Application
This section details the steps required to create a simple Visual Studio 2008 Windows Form
application, with associated DataGridView control for displaying data in selected tables from the target
database.
- Launch the Visual Studio 2008 SP1 IDE.
- Create a Web Application project by going to the File
menu in Visual Studio and choosing New Project.
- When the New Project window appears, choose either Visual Basic or
Visual C# as your programming language.
- Within the language category, click on Windows and select
Windows Form Application from the right-hand panel.
- Choose a name for the project, for example VirtWindowsFormApplication,
and click OK.
- In the Toolbox, expand Data Controls, and drag the
DataGridView control onto the form.
- Click on the little arrow in the top right of the DataGridView control.
This loads the DataGridView Task menu.
- Click on the Choose Data Source list box.
- Click on the Add Project Data Source link to connect to a data source.
- In the Data Source Configuration Wizard dialog
Choose Data Source Type page select the Database data source type and click Next.
- In the Data Source Configuration Wizard dialog
Choose your Data Connection page, select the New Connection button
- In the Choose Data Source dialog, select the OpenLink
Virtuoso Data Source from the list and click Continue.
- In the Add Connection dialog, specify the
hostname, portno, username and password for the target Virtuoso
Server and check the Save Password check box.
- Select the Select Database From List radio button and choose the
mysql database from the drop down list.
- Press the Test Connection dialog to verify that the database is accessible.
- Click OK to add the connection.
- Leave the default connect string namemysqlConnectionString and click Next.
- From the list of available tables returned for the mysql database, select the Shippers
table to be associated with the DataGridView control.
- The columns names of the select table will be displayed in the DataGridView.
- Resize the Form and DataGridView to allow all columns to be visible, if possible.
- To test the application, simply hit Ctrl+F5 within Visual Studio or
select Start Debugging from the Debug menu.
- The data from the Shippers table will be displayed in the DataGrid.
The task is now complete.
Previous
Using Microsoft Entity Frameworks to Access Sybase Schema Objects with Virtuoso |
Chapter Contents
|
Next
Using Microsoft Entity Frameworks to Access PostgreSQL Schema Objects with Virtuoso |