Entity Framework 6 自定义连接字符串ConnectionString连接MySQL

摘要:
provider=MySql.Data.MySqlClient;providerconnectionstring=“server=localhost;password=12345;database=dvap”“providerName=“System.Data.EntityClient”/>

  在开始介绍之前,首先来看看官方对Entity Framework的解释:Entity Framework (EF) is an object-relational mapper that enables .NET developers to work with relational data using domain-specific objects. It eliminates the need for most of the data-access code that developers usually need to write.这里面涉及到几个关键的知识点:1 首先它是一个对象关系映射。2 其次它使用的是特定于域的对象。 3 它摒弃了传统的通过SQL语句来访问数据库的方式。其实我们通过对比Linq To SQL我们会发现他们几乎都是一样的。因为人的思想更习惯于使用面向对象的方式,因为它更便于理解而且也使用起来更加方便快捷。

  下面就来一步步介绍如何在VS2015中添加ADO.NET实体数据模型。

Entity Framework 6 自定义连接字符串ConnectionString连接MySQL第1张

图一  添加ADO.NET实体数据模型

  1  新建一个文件夹,并向这个文件夹中添加一个ADO.NET实体数据模型,例如ModelTest。

       2  添加一个来自数据库的EF设计器,这里有四个选项,每一个都对应一种模型内容,这里暂时不介绍,在以后的序列中在做介绍。

Entity Framework 6 自定义连接字符串ConnectionString连接MySQL第2张

图二 选择模型内容

  3  新建连接。

Entity Framework 6 自定义连接字符串ConnectionString连接MySQL第3张

图三 新建连接

Entity Framework 6 自定义连接字符串ConnectionString连接MySQL第4张

图四 选择数据源

Entity Framework 6 自定义连接字符串ConnectionString连接MySQL第5张

图五 修改连接属性

  4 选择数据库对象,并生产对象关系映射。

Entity Framework 6 自定义连接字符串ConnectionString连接MySQL第6张

图六 选择数据库对象和设置

Entity Framework 6 自定义连接字符串ConnectionString连接MySQL第7张

图七 生产的特定于域的对象

       下面一部分我们来看看自动生成的连接字符串。

<add name="dvapEntities" connectionString="metadata=res://*/EF6.ModelTest.csdl|res://*/EF6.ModelTest.ssdl|res://*/EF6.ModelTest.msl;provider=MySql.Data.MySqlClient;provider connection string="server=localhost;user id=root;password=12345;database=dvap"" providerName="System.Data.EntityClient" />

  有时候我们不仅仅需要在配置文件中配置,这样我们就暴露了很多重要的信息,而在很多时候我们需要通过代码来生成连接字符串,那么这该怎么做呢?因为这个配置文件还是包含很多信息的,经过我的许多努力,终于在msdn上面找到了答案。

string server = System.Configuration.ConfigurationManager.AppSettings["MySQLServer"];
            if (!string.IsNullOrEmpty(server))
            {
                string providerName = "MySql.Data.MySqlClient";
                MySqlConnectionStringBuilder sqlbulider = new MySqlConnectionStringBuilder();
                sqlbulider.Server = server;
                sqlbulider.UserID = "root";
                sqlbulider.Password = "12345";
                sqlbulider.Database = "dvap";
                sqlbulider.AllowZeroDateTime = true;
                sqlbulider.ConvertZeroDateTime = true;
                sqlbulider.IntegratedSecurity = true;

                EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
                entityBuilder.Provider = providerName;
                entityBuilder.ProviderConnectionString = sqlbulider.ToString();
                entityBuilder.Metadata = @"res://*/EF6.DvapRegularModel.csdl|res://*/EF6.DvapRegularModel.ssdl|res://*/EF6.DvapRegularModel.msl";
                m_ConnectionString = entityBuilder.ToString();              
            }

  通过上面的方式我们能够生成正确的连接字符串,在生成连接字符串之后我们需要将这个连接字符串传入到自动生成的dvapEntities对象中,这里也贴出部分代码。  

namespace TestEF6.EF6
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    
    public partial class dvapEntities : DbContext
    {
        public dvapEntities()
            : base("name=dvapEntities")
        {
        }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }
    
        public virtual DbSet<dvap_scene_business> dvap_scene_business { get; set; }
        public virtual DbSet<echarts_barcharts_singleverticalcolumn> echarts_barcharts_singleverticalcolumn { get; set; }
        public virtual DbSet<echarts_barcharts_singleverticalcolumnproperty> echarts_barcharts_singleverticalcolumnproperty { get; set; }
        public virtual DbSet<logs> logs { get; set; }
        public virtual DbSet<options> options { get; set; }
        public virtual DbSet<test_stackhistogram> test_stackhistogram { get; set; }
        public virtual DbSet<users> users { get; set; }
    }
}

  仅仅使用默认的 dvapEntities函数肯定达不到要求,我们需要重载一个能够将连接字符串作为参数的构造函数,这里我们表述如下:

public dvapEntities(string connectionString) 
            :base(connectionString)           
        {

        }

  后面我们就可以使用这个构造函数来获取数据库中相应的数据了,这里我们也贴出相关的代码来作为参考。

public string GetOptionValue(string option_name)
      {
            try
            {
                using (var db = new EF6.dvapEntities(m_ConnectionString))
                {
                    EF6.options option = null;
                    option = (from x in db.options
                              where x.OptionName == option_name && x.UserID == 0
                              select x).SingleOrDefault() ?? null;
                    if (null != option)
                    {
                        return option.OptionValue;
                    }
                }
                return "";
            }
            catch (Exception ex)
            {
                return "";
            }
      }

  如果想查看当前代码示例请点击此处进行下载!   

免责声明:文章转载自《Entity Framework 6 自定义连接字符串ConnectionString连接MySQL》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇22个所见即所得在线 Web 编辑器以Delphi Package架构的应用程序开发下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

HTML往div中赋值

HTML中往div赋值 <div id="mazey">content</div>   使用JavaScript: var mazey=document.getElementById("mazey"); mazey.innerHTML=data;  使用jQuery: $("#mazey").html(data);  ...

oracle中监听程序当前无法识别连接描述符中请求服务 的解决方法

原因如下: 你oracle安装成功后,一直未停止数据库(即数据库是启动的),客户端配置成功后,应该一直不会有什么问题。 而一旦你和我同事一样,有时把Oracle安装在虚拟机中,而且Oracle安装完毕后,没在进行任何监听的配置,则虚拟机再启动,则就会出现ORA-12514的问题。如下图       如下是解决思路: 根据出错信息判断出客户端未监听...

PostGIS 快速入门(转)

原文:http://live.osgeo.org/zh/quickstart/postgis_quickstart.html   PostGIS 是 PostgreSQL 关系数据库的空间操作扩展。它为 PostgreSQL 提供了存储、查询和修改空间关系的能力。本文中 ‘PostgreSQL’ 指代基本的关系数据库功能,而 ‘PostGIS’ 指代扩展的...

Qt之操作数据库(SQLite)

SQLite 简介 SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、C#、PHP、Java等,还...

MySql操作手册

MySql MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySql操作手册 安装装M...

mysql中的information_schema数据库表说明

1. 概述 information_schema 数据库跟 performance_schema 一样,都是 MySQL 自带的信息数据库。其中 performance_schema 用于性能分析,而 information_schema 用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类型、访问权限等。 information_sch...