Asp.net 5.0 MVC6 EF6 迁移脚本

Posted

技术标签:

【中文标题】Asp.net 5.0 MVC6 EF6 迁移脚本【英文标题】:Asp.net 5.0 MVC6 EF6 Migration Scripts 【发布时间】:2015-12-11 22:03:29 【问题描述】:

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

在我创建任何这些之前,数据库创建了一个 __migrationHistory 表,其中包含 201509291902537_InitialCreate,因此我创建了一个具有该名称的文件并创建了另一个名为 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":  
    

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

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

【问题讨论】:

不确定 powershell 是否支持迁移:***.com/questions/30220291/… 我也看到了这个,但它唯一说的是让 migrate.exe 工作,我不知道该怎么做。 能分享一下project.json文件吗? 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于Asp.net 5.0 MVC6 EF6 迁移脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Asp.Net 5 (MVC 6) 中使用实体框架 6.x

ASP.NET 标识 2 到 3

在 ASP.NET Core MVC6 中将文件和模型发布到控制器

将 asp.net 5 MVC 6 与 Identity 和 EF 6 一起使用的示例

解读ASP.NET 5 & MVC6系列

解读ASP.NET 5 & MVC6系列:依赖注入