Entity Framework 4.1 не может создать базу данных MySQL - PullRequest
1 голос
/ 03 сентября 2011

У меня есть приложение 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

Я искал в интернете и много пытался решить эту проблему, но не смог найти решение.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 03 сентября 2011

Это может быть проблема с версией поставщика ado.net для MySQL, который вы используете.

Последняя версия dotconnect для MySQL поддерживает код в первую очередь для EF 4.1, см. http://www.devart.com/news/2011/dotconnects630.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...