2017-02-20 64 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) –

相關問題