实体框架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
方法中使用以下代码初始化数据库时,我得到ProviderIncompatibleException
说The 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手动创建数据库并重新运行应用程序,这次我得到了不同类型的异常:NotSupportedException
说Model compatibility cannot be checked because the database does not contain model metadata. Ensure that IncludeMetadataConvention has been added to the DbModelBuilder conventions
我在网上搜索了很多东西来克服这个问题,但找不到一个解决方案。
这可能是您正在使用的MySQL ado.net提供程序的版本有问题。
MySQL最新版本的dotconnect支持EF 4.1的代码优先,参见http://www.devart.com/news/2011/dotconnects630.html