entity framework连接mysql
http://2sharings.com/2015/visual-studio-2015-entity-frameworkef-6-mysql-code-first-asp-net-mvc
建一个console例子,然后添加EF引用 EntityFramework 与MySql.Data.Entity.EF6的DLL
,我们通过程序包管理器控制台来安装Entity Framework和MySql.Data.Entity程序集的相关引用
Install-Package MySql.Data.Entity
以上的Entity Framework和MySql.Data.Entity程序集安装好之后,我们需要在Web.Config配置文件中新增MySQL的连接字符串connectionStrings:
<connectionStrings>
<add name="EFMySqlDemoContext" connectionString="server=localhost;user id=root;password=123456;database=EFMySqlDemo;pooling=false;charset=utf8;Treat Tiny As Boolean=false;Convert Zero Datetime=True;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
其中,连接字符串中的部分参数请根据具体细节配置。 我们先来创建一个名为Blog的实体类:
using System;
namespace EfMySqlDemo.Models
{
public class Blog
{
public int Id { get; set; }
public string Title { get; set; }
public string Post { get; set; }
public DateTime CreatedOn { get; set; }
}
}
接下来,再创建一个名为EFMySqlDemoContext的连接上下文类,并在类上添加DbConfigurationType属性,如下:
using System.Data.Entity;
using MySql.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
namespace EfMySqlDemo
{
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class EFMySqlDemoContext : DbContext
{
}
}
在EFMySqlDemoContext这个类中配置连接字符串和数据库表的一些规则以及初始化等,配置后的EFMySqlDemoContext类代码:
using System;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using EfMySqlDemo.Models;
using MySql.Data.Entity;
namespace EfMySqlDemo
{
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class EFMySqlDemoContext : DbContext
{
public EFMySqlDemoContext() : base("EFMySqlDemoContext")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
base.OnModelCreating(modelBuilder);
}
public DbSet<Blog> Blogs { get; set; }
}
if (!string.IsNullOrEmpty(name))
{
var blog = new Blog { Name = name };
db.Blogs.Add(blog);
db.SaveChanges();
}
// Display all Blogs from the database
var query = from b in db.Blogs
orderby b.Name
select b;
}
下面,我们在程序包管理器控制台中使用:Enable-Migrations -verbose 命令来应用Entity Framework的数据迁移功能:
Enable-Migrations -verbose
说明: -verbose参数会在控制台中输入数据迁移的详细信息
迁移命令应用成功后,我们可以在解决方案的中看到多出来一个名为Migrations的文件夹,里面包含一个名为Configurations.cs的文件,先不用理会这个cs文件,我们继续使用命令来处理接下来的步骤。接着使用:
Add-Migration InitialDatabase -verbose
其中,InitialDatabase是数据迁移的名称,可以任意命名。命令成功运行后,Migrations文件夹中又会自动创建一个以时间戳开始的cs文件,如:201509191423578_InitialDatabase.cs 最后,我们应用Update-Database命令来生成数据库和实体对应的数据表:
Update-Database -verbose
命令运行成功后,打开MySQL数据库,我们可以看到,数据库efmysqldemo已成功生成,其中包含了两个表,__migrationhistory和blog。__migrationhistory顾名思义是数据迁移用的迁移历史数据表,这个表记录了我们每次对实体修改后映射到数据表的详细操作,在这里不作过多说明了。另一个表blog则是我们的实体对应生成的表。
到这里,我们Entity Framework在MySQL上的连接,配置和生成数据库及表的操作就基本完成了。 下面,我们来向表中插入测试数据,简单起见,就在HomeController的Index中直接添加插入数据的方法了,具体代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using EfMySqlDemo.Models;
namespace EfMySqlDemo.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
var blog1 = new Blog
{
Id = 1,
Title = "ASP.NET MVC 5+Entity Framework(EF) 6+MySQL+Code First示例教程初步(1)",
Post = "Entity Framework(EF) 6+MySQL+Code First Post 1",
CreatedOn = DateTime.Now
};
var blog2 = new Blog
{
Id = 1,
Title = "ASP.NET MVC 5+Entity Framework(EF) 6+MySQL+Code First示例教程初步(2)",
Post = "Entity Framework(EF) 6+MySQL+Code First Post 2",
CreatedOn = DateTime.Now
};
using (var db = new EFMySqlDemoContext())
{
db.Blogs.Add(blog1);
db.Blogs.Add(blog2);
db.SaveChanges();
}
return View();
}
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
}
写好代码后,按F5运行程序。我们再查看blog表,这时blog表里就多了两条我们刚才插入的测试数据:
最后,我们再来查询刚才插入的数据,还是在Index这个Action中来完成示例:
public ActionResult Index()
{
using (var db = new EFMySqlDemoContext())
{
var list = db.Blogs.ToList();
return View(list);
}
}
浙公网安备 33010602011771号