首先在MySQL数据库上使用EF代码进行格式错误的迁移

时间:2015-05-13 15:15:00

标签: c# mysql entity-framework

我正在使用C#,.NET 4.5,EF6 Code First,MySQL构建应用程序。

当我添加迁移时,生成的代码格式不正确。 “using”语句位于命名空间块中。这是一个例子:

错误:(由EF生成)

namespace RevoHost.BL.Entities.Migrations
{
    using System;
    using System.Data.Entity.Migrations;

    public partial class Permissions : DbMigration
    {
        public override void Up()
        {
            CreateTable(
            // etc...

我预计:

using System;
using System.Data.Entity.Migrations;

namespace RevoHost.BL.Entities.Migrations
{

    public partial class Permissions : DbMigration
    {
        public override void Up()
        {
            CreateTable(
            // etc...

手动修复很容易,但它仍然很烦人。我一直在寻找解决方案,但到目前为止,我无法想出一个解决方案。

我的DbContext类有这个属性:

[DbConfigurationType(typeof(MySqlEFConfiguration))]

我配置了这样的迁移:

namespace RevoHost.BL.Entities.Migrations
{
  internal sealed class Configuration : DbMigrationsConfiguration<RevoHost.BL.Entities.RevoContext>
  {
    public Configuration()
    {
      SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());
      CodeGenerator = new MySql.Data.Entity.MySqlMigrationCodeGenerator();
      AutomaticMigrationsEnabled = false;
    }

1 个答案:

答案 0 :(得分:0)

我发现了发生了什么事。事实上,正如Thewads在他的评论中提到的那样,代码本身并不是格式错误且完全合法。因为这是我的第一个在MySQL而不是SQL Server上运行的EF6项目,我立即认为MySQL是罪魁祸首,显然它不是。

我查看了另一个首先使用EF6代码进行迁移的项目。那段代码完全一样。接下来,我检查了从编译器得到的确切错误。

  

错误1类型或命名空间名称&#39; CodeDom&#39;命名空间中不存在&#39; RevoHost.BL.Entities.System&#39; (你错过了一个程序集引用吗?)

(和其他9个一样)

我在名为RevoHost.BL.Entities的名称空间中定义了一个实体。系统。 这会导致命名冲突;编译器在找到全局系统命名空间之前,在RevoHost.BL.Entities中找到System命名空间。

因此,简而言之,答案是,确保您没有定义与系统命名空间冲突的命名空间。