gpt4 book ai didi

mysql - MVC3 code-first- EF4.1 不会自动创建表(使用 MySQL 和 Connector/Net 6.3.6。)

转载 作者:可可西里 更新时间:2023-11-01 07:45:34 24 4
gpt4 key购买 nike

EF 4.1 连同 MySQL 和 Connector/Net 6.3.6 不会根据我的 POCO 对象神奇地自动创建表。我不确定我的配置是否有误,或者 Connector/.Net 6.3.6 是否根本不支持此功能。我已经在 Internet 上搜索了一个星期,但仍未找到答案,而且我相信我已经在 stackoverflow 上解决了所有 EF 和 MySQL 问题。我注意到很多帖子都提到了 dotConnect(例如 Problems using EF4.1 Code First with MVC3 and 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; }
}

我的数据库上下文

    public class MySQLConn : DbContext
{
public DbSet<ShopModel> Shops { get; set; }
public DbSet<ProductModel> Products { get; set; }
}

我创建了一个模拟类,它创建了一个新的 Shop 和一个新的 Product 对象,就像这样ctx.Shops.Add(新 ShopModel{ ... });ctx.Savechanges();//代码到此结束

当我运行我的代码时,出现以下错误:

Table 'schemeName.shops' doesn't exist

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: MySql.Data.MySqlClient.MySqlException: Table 'schemeName.shops' doesn't exist

最佳答案

我已经找到了解决这个问题的方法。您必须获得最新版本的 Connector/NET 6.4.4。添加数据库初始化程序。将 Persist Security Info=true 添加到您的连接字符串。我做了所有这些,我的工作非常完美。

还注意到,如果您已经有一个现有数据库,EF 可能会向您抛出一个 EntityDataModel 异常。在 EF 自动创建数据库和表之前,您可能必须手动删除以前的数据库。从那时起,您对模型和 DBContext 所做的任何更改都会自动反射(reflect)在数据库中。

关于mysql - MVC3 code-first- EF4.1 不会自动创建表(使用 MySQL 和 Connector/Net 6.3.6。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6330058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com