【问题标题】:asp.net mvc 5.1 mysql Entity Framework Controller Generationasp.net mvc 5.1 mysql 实体框架控制器生成
【发布时间】:2014-11-27 10:39:24
【问题描述】:

我有一个 asp.net mvc 5.1 解决方案,其中包含 3 个项目,如下图所示:

我在我的项目中安装了 Ninject、FakeitEasy、MySql nuget 包,并且我在我的项目中使用存储库模式,因此我有一个 IRepository 通用接口、IDbContext 接口和一个具体的存储库通用类(所有这些都在 AccountManager.领域)。 随着 Ninject 和 mysql 的所有设置,我构建了解决方案,到目前为止一切都很好,直到我尝试使用 Entity Framework 提供的脚手架选项添加控制器,我收到一条错误消息:

不支持使用相同的 DbCompiledModel 检索“AccountManager.Domain.Entities.Bank”的元数据以针对不同类型的数据库服务器创建上下文。而是为正在使用的每种类型的服务器创建一个单独的 DbCompiledModel。

当我首先使用 sqlite 和 EF 代码时,我看到了这一点。又是什么意思?有人看到我看不到的观点吗?

【问题讨论】:

  • MySql 和 Oracle AFAIK 对 CodeFirst 方法没有很好的支持。我正在使用 DatabaseFirst 方法使用 MySql 和 EF 开发一个项目,并且效果很好。
  • 我创建了一个简单的 mvc 5 Web 应用程序并引入了 mysql 6.9.5(EF、webconnect 和 mysql.data),并创建了 3 个简单的模型类,用 mysqlEFConfiguration 装饰了我的上下文类,它成功构建但仍然不能脚手架控制器。回到 6.8.3 版本,这完全没有问题。想知道发生了什么?会继续看下去
  • 有趣的是我删除了所有 mysql nuget 包并决定使用本地,它运行良好。我想知道问题是否不在于 mysql,而在于 .net 连接器......试图深入了解这一点

标签: c# mysql asp.net asp.net-mvc entity-framework


【解决方案1】:

一段时间以来,我一直在消除这种烦恼,我发现它很简单。用这个 mysqlefconfig 装饰我的上下文类,如下所示:

[DbConfigurationType(typeof(MySqlEFConfiguration))]

帮助上下文对 EF 自动创建的迁移表进行必要的调整,使其与 MySql 一起工作,这就是我的控制器根本没有脚手架的原因。我想到了尝试从https://stackoverflow.com/users/3671905/yurko 中对此进行评论,并且脚手架工作得很好。

唯一需要注意的是,在完成脚手架后,您需要取消注释它,以便恢复 EF 所需的所有 MySQL 特性。比起创建文件和编辑基础设施文件,我更喜欢属性配置。

【讨论】:

    【解决方案2】:

    好吧,对我来说唯一有效的方法是删除配置文件(app.config 或 web.config)中的所有内容并粘贴以下内容:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
      </startup>
      <system.data>
        <DbProviderFactories>
          <remove invariant="MySql.Data.MySqlClient" />
          <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description="Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" />
        </DbProviderFactories>
      </system.data>
      <connectionStrings>
        <add name="MyContext" connectionString="server=127.0.0.1; User Id=root; Password=password; Persist Security Info=True; database=Test;" providerName="MySql.Data.MySqlClient" />
      </connectionStrings>
    </configuration>
    

    Source

    在那之后我已经能够生成控制器,我希望它会有所帮助。 (当然,必须正确配置连接字符串)

    【讨论】:

      猜你喜欢
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      • 2010-09-25
      • 1970-01-01
      相关资源
      最近更新 更多