2017-02-20 132 views
2

我想将SQLite与Entity Framework Core一起使用。我下面这个教程官方:如何解决“找不到可执行文件匹配命令”dotnet-ef“”与新的csproj文件

.NET Core - New Database

它说要修改这样的project.json:

{ 
    "version": "1.0.0-*", 
    "buildOptions": { 
    "debugType": "portable", 
    "emitEntryPoint": true 
    }, 
    "dependencies": { 
    "Microsoft.EntityFrameworkCore.Sqlite": "1.1.0", 
    "Microsoft.EntityFrameworkCore.Design": { 
     "version": "1.1.0", 
     "type": "build" 
    } 
    }, 
    "frameworks": { 
    "netcoreapp1.1": { 
     "dependencies": { 
     "Microsoft.NETCore.App": { 
      "type": "platform", 
      "version": "1.1.0" 
     } 
     }, 
     "imports": "dnxcore50" 
    } 
    }, 
    "tools": { 
    "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4" 
    } 
} 

我现在已经安装了VS 2017年RC和网络核心使用的csproj文件而不是project.json。

我修改的csproj到Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version= "1.1.0-preview4-final"但是当我尝试的命令dotnet ef migrations add MyFirstMigration我收到以下错误:

“没有可执行找到匹配的命令‘的dotnet-EF’,”

我怎样才能解决这个问题与新的csproj?

回答

3

VS2017将于2017年3月7日正式发布。该文档涉及VS2015,它们尚未更新以反映最新的VS 2017变更。修改这样的csproject解决了这个问题:

<ItemGroup> 
    <PackageReference Include="Microsoft.Extensions.Configuration" Version="1.1.0" /> 
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="1.1.0" /> 
    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="1.1.0" /> 
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.0" /> 
    </ItemGroup> 

    <ItemGroup> 
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version = "1.1.0-preview4-final"/> 
    </ItemGroup> 

即使在此之后,当我试图运行与CLI命令第一迁移:

dotnet ef migrations add MyFirstMigration 

我得到了以下错误: “ 'TContext'上没有找到无参数的构造函数。无论是一个无参数的构造函数添加到“TContext”或在同一组件“TContext”添加“IDbContextFactory”的实现。”

this文件,这是因为设计时工具尝试自动发现怎么你的应用程序创建你的DbContext类型的实例。如果EF无法找到合适的方式来初始化您的DbContext,则可能会遇到此错误。

我敢肯定我有设置一个参数的构造函数,我能看到下面的CLI命令的情况下:

dotnet ef database dbContext list 

执行迁移的唯一方法已经实现接口IDbContextFactory<TContext>中该项目。文档以及如何做到这一点的例子是基于VS 2015年在2017年VS想要IDbContextFactory<TContext>.Create()一个DBContextFactoryOptions作为参数:

public class MyContextFactory: IDbContextFactory<MyContext> 
{ 
    public MyContext Create(DbContextFactoryOptions options) 
    { 
     var optionsBuilder = new DbContextOptionsBuilder<MyContext>();  
     optionsBuilder.UseSqlite("Filename=./mydatabase.db"); 

     return new MyContext(optionsBuilder.Options);   
    } 
} 
+1

我也建议使用1.1.0版本Microsoft.Extensions *(或任何其他ASP.NET包)来对齐它们。 – Smit

+0

当您说Microsoft网站上的文档已过时时,您可能太难了。该文档涉及VS2015,所以这就是为什么有一个(完全准确的)project.json的例子。 VS2017将于2017年3月7日正式发布。 但是我的问题是:什么声明'1.0.0-msbuild3-final'为'Microsoft.EntityFrameworkCore.Tools.DotNet'工具?如果你使用msbuild,是否意味着没有1.1.0工具? (我仍然在VS2015) –

相关问题