【问题标题】:MySQL Data Provider Not Showing in Entity Data Model WizardMySQL 数据提供程序未显示在实体数据模型向导中
【发布时间】:2023-03-29 14:03:01
【问题描述】:

我正在创建一个使用 MySQL 作为后端的 MVC 应用程序。我打算使用实体框架来处理这个数据库。我已经有一个数据库,所以需要从数据库中生成模型

环境:

MySQL 服务器 5.7.21 适用于 Visual Studio 1.27 的 MySQL 连接器/NET 6.10.5 视觉工作室 2015

重现问题:

第 1 步:添加新项目“Ado.net 实体数据模型” 第 2 步:选择“数据库中的 EF 设计器”并单击“下一步” 第 3 步:点击“新建连接”

没有可用的 mysql 连接器。

其他详情:

  1. 我已经添加了“System.Runtime”交易,因为它在安装 Mysql 时显示错误。数据。来自金块的 Ef6
  2. 我在“System.数据的汇编参考
  3. 我在 Visual Studio 2017 中尝试了相同的步骤。在这里我可以在步骤 3 中看到提供程序,但单击确定后对话框关闭而不是显示表格列表

在 Visual Studio 2015 和 17 的初始时间,它显示提供程序。当我下次尝试时它没有显示 请帮忙。我检查了 2 天

【问题讨论】:

标签: mysql entity-framework visual-studio-2015


【解决方案1】:

开始使用 VS 2013 和 EF 6

  1. 为 Visual Studio 1.1.1 安装 MySQL
  2. 安装 Connector/Net 6.8.1 产品。
  3. 要首先使用数据库,请执行以下操作
    • 为名为 MySql.Data.Entity.EF6 的新程序集添加引用并将其复制到应用程序的 bin forlder。
    • 使用以下行将提供程序添加到实体框架提供程序部分的应用程序/Web 配置文件中:
    • 在运行向导之前编译您的应用程序,以便应用新的更改。
  4. 要使用 Model First,请执行以下操作
    • 为名为 MySql.Data.Entity.EF6 的新程序集添加引用并将其复制到应用程序的 bin forlder。
    • 添加新的或现有的 ADO.Net 实体模型。
    • 选择MySQL对应的T4模板(SSDLToMySQL)
    • 右键单击模型,然后选择生成脚本以创建数据库。 (应生成一个 MySQL 脚本供您创建数据库)。

希望这会有所帮助。

MySQL for Visual Studio 1.1.1

MySQL Connector/Net 6.8.1 Beta

【讨论】:

    【解决方案2】:

    正如 MaDOS 所提到的,mySql 并不受支持。如果您仍然想使用 EF,则必须先尝试代码。

    您必须编写映射类,并告诉 EF 它不应该更改数据库。

    禁用 db-changes 的示例上下文

    public class MySqlDbContext : DbContext
    {
        public DbSet<MyOrderClass> Orders { get; set; }
    
        public MySqlDbContext(IDbConnection connection)
            : base((DbConnection)connection, false)
        {
            Database.SetInitializer<MySqlDbContext>(null); // Disable db-changes by dbContext
        }
    }
    

    您的主要问题是数据类型。在 MS 世界之外,并非所有数据类型都受支持(Oracle 在 DateTime 方面也遇到了一些问题)。在下面的示例类中,“Created”列被处理为字符串,它总是有效的。在您的 .Net 应用程序中,您必须实现映射到所需类型的“转换器”属性。

    带有映射配置的示例类

    [Table("TORDERS")]
    public class MyOrderClass
    {
        [Column("ORDERID")]
        public long Id { get; set; }
        [Column("CREATED")]
        public string CreatedString { get; set; }
    
        [NotMapped]
        public DateTime? Created
        {
            get
            {
                DateTime tmp;
                if (DateTime.TryParse(this.CreatedString, out tmp))
                    return tmp;
    
                return null;
            }
            set
            {
                this.CreatedString = value.HasValue ? value.Value.ToString("yyyy-MM-dd HH:mm:ss") : null;
            }
        }
    }
    
    
        static void Main(params string[] args)
        {
            MyOrderClass tmp = new MyOrderClass() { CreatedString = "2018-01-01 11:11:11"};
    
            Console.WriteLine(tmp.Created.ToString()); // This is how you want to work
            tmp.Created = null;
            Console.WriteLine(tmp.CreatedString); // this is surely not what you want to do
    
            tmp.Created = new DateTime(2018,02,02,10,10,10);
            Console.WriteLine(tmp.CreatedString); // Check if setter works ;)
        }
    

    我没有更新哪些类型可以工作,但是有了这个你就可以一直使用 EF。 我们前段时间使用它来访问现有的数据库,无论如何它都有一个糟糕的数据库模式,因为我们无论如何都要设置数据类型的模式;)。

    【讨论】:

      【解决方案3】:

      会不会是 32 位与 64 位的问题?
      示例:64位驱动安装Visual Studio是32位?
      我一直在使用 oledb 到 Informix 时遇到这个问题。您的软件可以在 64 位下完美运行,但工具是 32 位的。

      【讨论】:

        猜你喜欢
        • 2019-03-16
        • 1970-01-01
        • 2016-03-23
        • 1970-01-01
        • 2014-05-04
        • 2016-04-18
        • 2016-09-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多