如何使用实体框架访问MySQL数据库

本文关键字:MySQL 数据库 访问 框架 何使用 实体 | 更新日期: 2023-09-27 18:25:48

背景:我已经创建了一个ASP.net MVC 4应用程序和一个mysql数据库。我首先使用代码生成数据库。Web应用程序将用作与数据交互的UI。然而,数据是在一个单独的C#程序中创建的。它从串行设备获取测试数据。

问题:我不知道如何使用c#应用程序中的实体框架连接到数据库。

我已经为C#应用程序创建了一个新的模型。我读到使用共享.DLL不是最好的主意。

这就是我目前所拥有的。

    private ReportDBContext db = new ReportDBContext();
    private void saveReport()
    {
        string connStr = "server=RnD-Chopper;user=CWXDAQ;database=ReportDB;port=3306;password=QADXWC;";
        MySqlConnection conn = new MySqlConnection(connStr);
        try
        {
            db.Reports.Add();
            // Perform database operations
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
        conn.Close();
        Console.WriteLine("Done.");


        unlockGUI();
    }

报表模型

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using MySql.Data.Entity;
using MySql.Data.MySqlClient;
using System.Linq;
using System.Web;
namespace CXW__DAQ___Record.Models
{
    public class Report
    {
        [Display(Name = "Test ID #")]
        public int ID { get; set; }
        [Required(ErrorMessage = "Test Name is Required")]
        [Display(Name = "Test Name")]
        public string Name { get; set; }
        [Display(Name = "Date Tested")]
        public DateTime TestDate { get; set; }
        [Display(Name="Test Done For")]
        public string TestFor { get; set; }
        public string Comment { get; set; }
        public enum enumForceUnits { lbs };
        public enum enumTimeUnits { mS };
        [Required(ErrorMessage = "Unit of Force (ForceUnit) is required")]
        public enumForceUnits forceUnit;
        [Required(ErrorMessage = "Unit of Time (TimeUnit) is required")]
        public enumTimeUnits timeUnit;
        public virtual ICollection<Reading> Readings { get; set; }
    }

    public class Reading
    {
        public int ID { get; set; }
        public virtual Report Report { get; set; }
        public long Time { get; set; }
        public double Force { get; set; }
    }

    public class ReportDBContext : DbContext
    {
        public DbSet<Report> Reports { get; set; }
        public DbSet<Reading> Readings { get; set; }
    }
}

如何使用实体框架访问MySQL数据库

您需要使用连接器-http://dev.mysql.com/downloads/connector/net

也可以使用连接器重新生成模型。

我自己想好了。您需要将连接字符串添加到app.config文件,然后安装Entity Framework Power Tools,然后使用它对数据库中的模型进行反向工程。

创建连接字符串时,请确保将Persist Security Info设置为True

我遇到的另一个问题是,Visual Studio一直试图使用连接器的6.6.5版本,而不是安装的6.7.4 版本

所以我不得不将这一行添加到app.config文件以及中

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.6.5.0" newVersion="6.7.4.0" />           
      </dependentAssembly>
    </assemblyBinding>
  </runtime>