У меня есть приложение WPF, в котором я пытаюсь использовать Entity Framework 4.1 Code First для логики доступа к данным. Я использую MySQL в качестве СУБД. Для простоты я создал только один класс данных 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
file 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
Я искал в интернете и много пытался решить эту проблему, но не смог найти решение.
Любая помощь будет принята с благодарностью.