This code demonstrates access to OSCOMMERCE database objects which are hosted on a mysql server, through the enitity framework and LINQ. Additionaly, the connectionstring is overriden at runtime to seperate developent and production environments.
- Install the MySql connector for visual studio
- Add a ADO.NET Entity data object to the solution
- Use the Wizard to create the object context (adding the tables product and products_descriptions for this example
- If you use VS2012: Remove the .tt files generated under the .edmx file
- Set the code generation strategy to Default (click on the designer surface / properties)
using System; using System.Collections.Generic; using System.Data.EntityClient; using System.Linq; using System.Text; using MySql.Data.MySqlClient; namespace MysqlEntities { class Program { /// <summary> /// Sample OSCOmmerce access using Entity framework and LINQ with Mysql /// </summary> /// <param name="args"></param> static void Main(string[] args) { MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder(); builder.Server = "your.server.ip"; builder.Database = "oscommerce"; builder.UserID = "mysqluser"; builder.Password = "mysqlpassword"; EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder(); entityBuilder.Provider = "MySql.Data.MySqlClient"; entityBuilder.ProviderConnectionString = builder.ToString(); entityBuilder.Metadata = @"res://*/oscommerce.csdl|res://*/oscommerce.ssdl|res://*/oscommerce.msl"; string entString = entityBuilder.ToString(); oscommerceEntities oscContext = new oscommerceEntities(entString); // select some random product var prod = (from p in oscContext.products where p.products_model == "403" select p).SingleOrDefault(); if (prod == null) return; // not present // retrieve description field and display it var desc = (from d in oscContext.products_description where d.products_id == prod.products_id select d).Single(); Console.WriteLine(desc.products_name); Console.ReadLine(); } } }
If you do not install the MySQL connector on the target machines, you will also need to register the provider, by adding the following section to your web.config or app.config
<system.data> <DbProviderFactories> <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> </DbProviderFactories> </sy