我有一个WPF应用程序,我正在尝试使用Entity Framework 4.1 Code First进行数据访问逻辑。我使用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;
}
我向ApplicationContext
文件添加名为app.config
的连接字符串。
<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.
并且内部异常显示为{{ 1}}。
Unknown database
我认为它尝试使用我在连接字符串中提供的数据库名称连接到数据库并因为它不存在而失败。但是,如果还没有,我希望它应该创建一个。
我还尝试从MySQL手动创建数据库并重新运行应用程序,这次我得到了一种不同类型的异常:Database.SetInitializer<ApplicationContext>(
new DropCreateDatabaseIfModelChanges<ApplicationContext>());
this.AppDatabaseContext = new ApplicationContext();
this.AppDatabaseContext.Database.Initialize(true);
说NotSupportedException
我搜索了互联网并试了很多东西来解决这个问题,但找不到解决办法。
非常感谢任何帮助。
答案 0 :(得分:0)
您使用的是针对MySQL的ado.net提供程序版本可能存在问题。
最新版本的dotconnect for MySQL支持EF 4.1的代码优先,请参阅http://www.devart.com/news/2011/dotconnects630.html