使用Entity Framework访问MySQL数据库

简介

Entity Framework (EF,ADO.NET Entity Framework)是微软官方提供的.NET平台的ORM框架。相比于LINQ TO SQL,EF框架具有很明显的优势:

  • EF框架支持多种数据库,而不仅仅局限于微软的SQL Server,MySQL,Oracle都有良好的支持。
  • 支持存储过程。
  • 强大的可视化模型设计工具,与Visual Studio深度整合。
  • 与.NET平台的其他技术整合良好。

Entity Framework的架构设计如图:

EntityFramework(en-us,MSDN.10)

(图片来源自MSDN)

Entity Framwork已经成为微软推荐的ORM方案。接下来我们将介绍如何使用EF框架访问MySQL数据库。

安装MySQL Connector

首先,为了使Visual Studio支持MySQL,需要安装MySQL Connector/Net,可以从这个地址找到下载:

http://dev.mysql.com/downloads/connector/net/6.6.html#downloads

我选用的是6.6.5版本。最新版是6.7.4,但安装包里面似乎缺少了Visual Studio集成支持。

安装过程很简单,按照向导步骤下一步即可。

从数据库生成实体模型

在Visual Studio项目中,右键新建项,打开新建项对话框,选择添加ADO.NET实体数据模型:

ef_step1

打开实体数据模型向导:

ef_step2选择数据库连接。如果现有的连接中没有,请点击新建连接:

ef_step3.1点击继续按钮即可设置MySQL数据库的连接信息:

ef_step3.2创建连接完成后,即可选择要映射的对象:

ef_step4勾选要映射到模型中的表。推荐勾选“确定所生成对象名称的单复数形式”,不勾选“在模型中加入外键列”。

在生成模型时,VS会自动根据数据库的外键关系,为实体对象创建相应的关联。勾选“在模型中加入外键列”则会把外键列也生成到字段中。

点击完成即可完成模型的生成。打开刚刚生成的*.edmx文件,可以对生成的模型进行进一步调整。

ef_edmx至此,生成映射模型的工作即告完成。

查询实例

下面给出一个简单的CRUD的例子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EFDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Query();

            Insert();
            Query();

            Update();
            Query();

            Delete();
            Query();
        }

        /// <summary>
        /// 查询
        /// </summary>
        static void Query()
        {
            var context = new TestEntities();
            var users = from e in context.Users select e;
            foreach (var u in users)
            {
                Console.WriteLine(u.Name);
                Console.WriteLine(u.Pass);
                Console.WriteLine("-------------");
            }
            Console.WriteLine("=====================");
        }

        /// <summary>
        /// 插入
        /// </summary>
        static void Insert()
        {
            var context = new TestEntities();
            User user = new User();
            user.Name = "test002";
            user.Pass = "test123";
            context.Users.AddObject(user);
            context.SaveChanges();
        }

        /// <summary>
        /// 更新
        /// </summary>
        static void Update()
        {
            var context = new TestEntities();
            var user = (from e in context.Users select e).First();
            user.Pass = "123";
            context.SaveChanges();
        }

        /// <summary>
        /// 删除
        /// </summary>
        static void Delete()
        {
            var context = new TestEntities();
            var user = (from e in context.Users where e.Name.Equals("test002") select e).First();
            context.Users.DeleteObject(user);
            context.SaveChanges();
        }
    }
}

利用EF框架,可以快速的完成ORM工作,借助LINQ语句查询MySQL数据库是一件很爽的事情。由于EF框架的官方背景,它比NHibernate的优势在于,可以更好的和Visual Studio、.NET平台进行整合。

当EF框架和.NET MVC或者WCF协作时,数据访问层的障碍几乎扫平。借助LINQ的语言级编译检查,比书写SQL语句查询更能避免问题出现。

参考资料:http://kb.cnblogs.com/zt/ef/

使用Entity Framework访问MySQL数据库》有1个想法

评论已关闭。