实体框架4.1无法创建MySQL数据库

本文关键字:创建 MySQL 数据库 框架 实体 | 更新日期: 2023-09-27 18:07:30

我有一个WPF应用程序,我试图使用实体框架4.1代码首先用于数据访问逻辑。我使用MySQL作为DBMS。为简单起见,我只创建了一个数据类User:

public class User
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Required]
    [MaxLength(50)]
    public string Name { get; set; }
    [Required]
    [MaxLength(50)]
    public string Surname { get; set; }
    [Required]
    [MaxLength(50)]
    public string Username { get; set; }
    [Required]
    [MaxLength(255)]
    public string Password { get; set; }
}

我有一个ApplicationContext类扩展DbContext像:

public class ApplicationContext : DbContext
{
    public ApplicationContext()
        : base()
    {
    }
    public DbSet<User> Users;
}

我在app.config文件中添加了一个名为ApplicationContext的连接字符串。

<configuration>
    <connectionStrings>
        <clear/>
        <add name="ApplicationContext" 
 connectionString="server=localhost;User Id=myuser;Password=mypassword;Persist Security Info=True;database=mydatabase" 
 providerName="MySql.Data.MySqlClient"/>
    </connectionStrings>
    <system.data>
        <DbProviderFactories>
            <remove invariant="MySql.Data.MySqlClient" />
            <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient"
 description=".Net Framework Data Provider for MySQL" 
 type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.4.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
        </DbProviderFactories>
    </system.data>
</configuration>

当我尝试在App.xaml.cs文件OnStartup方法中使用以下代码初始化数据库时,我得到ProviderIncompatibleExceptionThe provider did not return a ProviderManifestToken string.,内部异常说Unknown database

Database.SetInitializer<ApplicationContext>(
    new DropCreateDatabaseIfModelChanges<ApplicationContext>());
this.AppDatabaseContext = new ApplicationContext();
this.AppDatabaseContext.Database.Initialize(true);

我认为它试图用我在连接字符串中提供的数据库名称连接到数据库,并且由于它不存在而失败。但是,如果还没有的话,我希望它应该创建一个。

我还尝试从MySQL手动创建数据库并重新运行应用程序,这次我得到了不同类型的异常:NotSupportedExceptionModel compatibility cannot be checked because the database does not contain model metadata. Ensure that IncludeMetadataConvention has been added to the DbModelBuilder conventions

我在网上搜索了很多东西来克服这个问题,但找不到一个解决方案。

实体框架4.1无法创建MySQL数据库

这可能是您正在使用的MySQL ado.net提供程序的版本有问题。

MySQL最新版本的dotconnect支持EF 4.1的代码优先,参见http://www.devart.com/news/2011/dotconnects630.html