Asp.net 5.0 MVC6 EF6迁移脚本

Ian*_*ton 8 powershell entity-framework-6 asp.net-core-mvc asp.net-core

我正在使用Asp.net 5.0 mvc6,我想使用entityframework 6,因为7还没有完全编码,我已经能够让它做除了迁移之外的一切.

当我输入enable-migration,add-migration或update-datatabase时,我得到了

enable-migration : The term 'enable-migration' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of 
the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ enable-migration
+ ~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (enable-migration:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
Run Code Online (Sandbox Code Playgroud)

我很确定这些命令不在PowerShell中.但我确实发现%userdir%.dnx\packages\EntityFramework\_6.1.3\tools中有工具.稍微研究一下migrate.exe,我发现它们告诉我它只适用于proj文件,因此无法使用新设置.

我也尝试在dbcontext的构造函数中使用此代码进入编程路径,我有:

        var configuration = new MigrationConfiguration();
        var migrator = new DbMigrator(configuration);
        migrator.Configuration.TargetDatabase = new DbConnectionInfo(nameOrConnectionString, "System.Data.SqlClient");
        if (migrator.GetPendingMigrations())
        {
            migrator.Update();
        }
Run Code Online (Sandbox Code Playgroud)

和我的确认脚本中的代码:

    public MigrationConfiguration()
    {
        AutomaticMigrationsEnabled = true;
        MigrationsAssembly = Assembly.GetAssembly(typeof(InitialCreate));
        MigrationsNamespace = "[Namespace of my migration scripts]";
    }
Run Code Online (Sandbox Code Playgroud)

在我做任何这个之前,数据库创建了一个带有201509291902537_InitialCreate的__migrationHistory表,所以我创建了一个具有该名称的文件,并创建了另一个名为201509291902538_test的文件,它们看起来像这样:

201509291902537_InitialCreate:

namespace Infrastructure.EF.Migrations
{
    using System.Data.Entity.Migrations;

    public partial class InitialCreate : DbMigration
    {
        public override void Up()
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

201509291902538_test:

namespace Infrastructure.EF.Migrations
{
    using System;
    using System.Data.Entity.Migrations;

    public partial class test: DbMigration
    {
        public override void Up()
        {
            Sql("insert into LegalEntity (Id, Name ) values(" + Guid.NewGuid() + ", 'Test'");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

无论我尝试了什么,migrator.GetPendingMigrations()都没有说它有任何新的更新,如果我做了一个虚假的更新并告诉它确切需要更新它仍然不起作用它只是在更新函数上抛出一个空引用异常.

这是我的假移民:

namespace Infrastructure.EF.Contexts
{
    public class Migrator : DbMigrator
    {
        public Migrator(DbMigrationsConfiguration configuration) : base(configuration)
        {
        }

        public override IEnumerable<string> GetDatabaseMigrations()
        {
            return new List<string>() { "InitialCreate" };
        }

        public override IEnumerable<string> GetLocalMigrations()
        {
            return new List<string>() { "InitialCreate", "test" };
        }

        public override IEnumerable<string> GetPendingMigrations()
        {
            return new List<string>() { "test" };
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

project.json:

{
    "version": "1.0.0-*",

    "dependencies": {
        "Autofac.Framework.DependencyInjection": "4.0.0-beta5-*",
        "AutoMapper": "4.0.4",
        "EntityFramework": "6.1.3",
        "log4net": "2.0.3",
        "Microsoft.AspNet.Http.Abstractions": "1.0.0-beta5",
        "Microsoft.CSharp": "4.0.0-*",
        "Microsoft.Framework.Configuration.Json": "1.0.0-beta5",
        "RestSharp": "105.2.3",
        "System.Linq": "4.0.0-*",
        "System.Runtime": "4.0.10-*",
        "System.Threading": "4.0.10-*"
    },

    "frameworks": {
        "dnx451": {
        }
    },

    "configurations": {
        "DV": { },
        "QA": { },
        "TR": { },
        "PR": { }
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了类名和文件名,似乎都没有用.

有没有人对这些事情有任何好运,或者看到我对其中一个做错了什么?

小智 0

您是否尝试过此操作:http://www.bricelam.net/2014/09/14/migrations-on-k.html?它适用于 EF 7,但我认为您可以将版本更改为 EF6。