MySQL数据提供程序未在实体数据模型向导中显示

时间:2018-02-01 10:39:28

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

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

环境:

MySQL Server 5.7.21 MySQL for Visual Studio 1.27 Connector / NET 6.10.5 Visual Studio 2015

重现问题:

第1步:添加新项目' Ado.net实体数据模型' 第2步:从数据库中选择' EF Designer'然后点击'下一步' 第3步:点击“新建连接”

没有可用的mysql连接器。

其他详细信息:

  1. 我已添加"系统。运行时"处理因为它在安装Mysql时显示错误。数据。来自金块的Ef6
  2. 我改变了#34; CopyLocal = true"在'系统。数据'装配参考
  3. 我在Visual Studio 2017中尝试了相同的步骤。在这里,我可以在步骤3中看到提供程序,但在单击“确定”对话框关闭后,而不是显示表列表
  4. 在Visual Studio 2015和17初始时间,它显示提供程序。当我下次尝试它没有显示时 请帮忙。我正在检查这2天

3 个答案:

答案 0 :(得分:2)

开始使用VS 2013和EF 6

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

    MySQL for Visual Studio 1.1.1

    MySQL Connector/Net 6.8.1 Beta

答案 1 :(得分:0)

正如MaDOS所说,mySql并非真正支持。如果你想要使用EF,你必须先进行代码尝试。

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

禁用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-world之外,并非所有数据类型都受支持(Oracle也遇到了DateTime的一些问题)。在下面的示例类中,&#34; Created&#34; -column作为字符串处理,它始终有效。在.Net应用程序中,您必须实现映射到所需类型的&#34; converter&#34; -properties。

示例 - 具有映射配置的类

[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 ;)
    }

我不是uptodate哪种类型的工作,但有了这个,你总是能够使用EF。 我们前段时间使用它来访问一个现有的数据库,无论如何这都是一个糟糕的数据库模式,因为我们无论如何都要设置数据类型的模式;)。

答案 2 :(得分:0)

这可能是32位对64位问题吗? 示例:安装64位驱动程序Visual Studio是32位?
 使用oledb到Informix,我一直有这个问题。你的软件将在64位完美工作,但工具是32位。