Asp.net 5.0 MVC6 EF6迁移脚本

时间:2015-09-15 15:11:16

标签: powershell entity-framework-6 asp.net-core asp.net-core-mvc

我正在使用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

我很确定这些命令不在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();
        }

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

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

在我做任何这个之前,数据库在其中创建了一个带有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()
        {
        }
    }
}

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'");
        }
    }
}

无论我尝试了什么,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" };
        }
    }
}

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": { }
    }
}

我已经尝试了类名和文件名,似乎都不起作用。

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

2 个答案:

答案 0 :(得分:1)

如果要将EF6与ASP.NET MVC6一起使用,请将EF6存储库公开为.NET 4.5中的Web API 2,并在ASP.NET MVC6中使用它们。

我知道它有很多额外的工作,因为现有的EF6数据访问层和EF6到EF7迁移中的类似问题,我采用这种方法来学习和开发MVC6应用程序。

答案 1 :(得分:0)

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