EF 4.1 вместе с MySQL и Connector / Net 6.3.6 не создает таблицы автоматически на основе моих объектов POCO.Я не уверен, что у меня неправильная конфигурация или Connector / .Net 6.3.6 просто не поддерживает эту функцию.Я сканировал Интернет в течение недели, не находя ответа, и я думаю, что я рассмотрел все вопросы EF и MySQL здесь в stackoverflow.Я заметил, что многие посты относятся к dotConnect (например, Проблемы с использованием кода EF4.1 Сначала с MVC3 и MySQL ), но мне нужно найти бесплатное решение.Я настроил проверку подлинности с помощью форм, и это прекрасно работает с поставщиками MySQL, но мне пришлось создавать схему базы данных и таблицы вручную.
Я настроил свой проект следующим образом.Части моего файла web.config.
<connectionStrings>
<add name="MySQLConn" connectionString="Server=localhost;Database=XxX;Uid=xXx;Pwd=xXx;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
<profile defaultProvider="MySqlProfileProvider" enabled="true">
<providers>
<clear />
<add name="MySqlProfileProvider" type="MySql.Web.Profile.MySQLProfileProvider,MySql.Web,Version=6.3.6.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d" connectionStringName="MySQLConn" applicationName="/" />
</providers>
</profile>
<roleManager enabled="true" defaultProvider="MySqlRoleProvider">
<providers>
<clear />
<add name="MySqlRoleProvider" type="MySql.Web.Security.MySQLRoleProvider,MySql.Web,Version=6.3.6.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d" connectionStringName="MySQLConn" applicationName="/" />
</providers>
<system.data>
<DbProviderFactories>
<clear />
<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.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
Мои объекты POCO:
[XmlRoot(ElementName = "Shop", IsNullable = false)]
[Table("shops")]
public class ShopModel
{
[Key]
public int Id { get; set; }
// must be unique
[Required]
public string Name { get; set; }
public string SiteUrl { get; set; }
public string LogoUrl { get; set; }
public string AffiliateSuffix { get; set; }
public virtual ICollection<ProductModel> ProductModels { get; set; }
}
[XmlRoot(ElementName = "Product", IsNullable = false)]
[Table("products")]
public class ProductModel
{
[Key]
public int Id { get; set; }
[Required]
public string Title { get; set; }
[Required]
public decimal Price { get; set; }
public string ImageUrl { get; set; }
public string ProductUrl { get; set; }
[Required]
public virtual ShopModel ShopModel { get; set; }
}
Мой DBContext
public class MySQLConn : DbContext
{
public DbSet<ShopModel> Shops { get; set; }
public DbSet<ProductModel> Products { get; set; }
}
Я создал фиктивный класс, который создает новый магазин и новый объект Product, например, ctx.Shops.Add (new ShopModel {...});ctx.Savechanges ();// код останавливается здесь
Когда я запускаю свой код, я получаю следующую ошибку:
Таблица 'имя_символа' не существует
Описание: Anнеобработанное исключение произошло во время выполнения текущего веб-запроса.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Сведения об исключении: MySql.Data.MySqlClient.MySqlException: таблица «имя-схемы.шопов» не существует