使用Entity Framework訪問MySQL數據庫

發表在個人博客:http://starlight36.com/post/querying-mysql-with-ef html

簡介

Entity Framework (EF,ADO.NET Entity Framework)是微軟官方提供的.NET平臺的ORM框架。相比於LINQ TO SQL,EF框架具備很明顯的優點: mysql

  • EF框架支持多種數據庫,而不單單侷限於微軟的SQL Server,MySQL,Oracle都有良好的支持。
  • 支持存儲過程。
  • 強大的可視化模型設計工具,與Visual Studio深度整合。
  • 與.NET平臺的其餘技術整合良好。

Entity Framework的架構設計如圖: sql

EntityFramework(en-us,MSDN.10)

(圖片來源自MSDN) 數據庫

Entity Framwork已經成爲微軟推薦的ORM方案。接下來咱們將介紹如何使用EF框架訪問MySQL數據庫。 c#

安裝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集成支持。 工具

安裝過程很簡單,按照嚮導步驟下一步便可。 post

從數據庫生成實體模型

在Visual Studio項目中,右鍵新建項,打開新建項對話框,選擇添加ADO.NET實體數據模型: spa

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();
        }
    }
}
相關文章
相關標籤/搜索