加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

c# – 带有EntityFramework 6架构错误0040的MySql 5.6

发布时间:2020-12-11 23:46:29 所属栏目:MySql教程 来源:网络整理
导读:我有一个使用EF6代码的ASP.NET MVC站点,它可以完美地对抗MS SQL Server(在本地开发机器和Azure网站/ SQL上).现在我将它转移到使用MySql 5.6 DBS的生产中,这给我带来了麻烦. 我的解决方案分为多个层(Web,视图模型,模型,数据层接口),这些层是持久性无知的(使用

我有一个使用EF6代码的ASP.NET MVC站点,它可以完美地对抗MS SQL Server(在本地开发机器和Azure网站/ SQL上).现在我将它转移到使用MySql 5.6 DBS的生产中,这给我带来了麻烦.

我的解决方案分为多个层(Web,视图模型,模型,数据层接口),这些层是持久性无知的(使用UnitOfWork和GenericRepository)和引用EF程序集的单个数据项目.

现在我想我会将我的解决方案交换机EF提供程序从SQL Server分支到MySql.
所以我添加了MySql.Data.Entities NuGet包并对web.config进行了以下更改:

MySql Connector / Net版本是MySql.Data 6.8.3.0

我还将[DbConfigurationType(typeof(DbContextConfiguration))]添加到我的DbContext类和SetExecutionStrategy(MySqlProviderInvariantName.ProviderName,()=> new MySqlExecutionStrategy());到我的DbContextConfiguration类继承自MySqlEFConfiguration

我能够运行我的代码优先迁移(借助SetHistoryContextFactory(MySqlProviderInvariantName.ProviderName,(conn,schema)=> new MySqlHistoryContext(conn,schema));)并创建数据库模式.

据我所知,数据库模式似乎是正确的. SQL Server中nvarchar的列是longtext或varchar(取决于实体属性上指定的最大长度),MySql和datetime2中的列是datetime.

现在,当我运行应用程序时,我收到以下异常:

System.Data.DataException was unhandled by user code
  HResult=-2146233087
  Message=An exception occurred while initializing the database. See the InnerException for details.
  Source=EntityFramework
  StackTrace:
       at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action)
       at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()
       at System.Data.Entity.Internal.LazyInternalContext.

请注意

Schema specified is not valid. Errors: 
(0,0) : error 0040: The Type nvarchar(max) is not qualified with a namespace or alias. Only primitive types can be used without qualification.

我在我的智慧结束.无法弄清楚如何处理此问题或如何使EF与MySql提供程序正常工作.在SO或Web上一般没有任何用处.我发现的所有内容都与http://forums.devart.com/viewtopic.php?t=24678上的Oracle DBS类似

我会感激任何想法.我开始认为移动到NHibernate会更好,如果我知道它会解决这个问题 – 我想知道问题是否与EF如何映射实体并生成SQL语句或MySql提供者/连接器中的一些错误有关.

最佳答案 如果为SQL Server创建了迁移,然后将引擎更改为MySQL并尝试更新数据库,则会出现此问题.我修正了:

>删除所有迁移类
>删除__migrationhistory mysql表(如果存在)
>配置实体框架以使用MySQL
>创建新的初始迁移.

配置文件需要这个:


DbContext类使用名为PrimaryDatabase的连接字符串,该字符串在上面定义:

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext() : base("PrimaryDatabase")
    {
    }

}

最后在迁移配置文件中:

internal sealed class Configuration : DbMigrationsConfiguration

你可以找到详细的信息here.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读