2017-02-20 36 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 и Net Ядро теперь использует файл csproj вместо project.json.

Я изменил мой csproj к Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version= "1.1.0-preview4-final", но когда я пытаюсь команду dotnet ef migrations add MyFirstMigration я получаю следующее сообщение об ошибке:

«не исполняемый файл не найден соответствующий команда„DotNet-эф“»

Как я могу это исправить с новым csproj?

ответ

3

VS2017 будет официально выпущен 7 марта 2017 года. Документ касается 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» или добавить реализацию «IDbContextFactory» в той же сборке, как «TContext».»

Согласно this документу, это происходит потому, что во время разработки инструментов пытаются автоматически найти как ваше приложение создает экземпляры вашего типа DbContext. Если EF не может найти подходящий способ инициализации вашего DbContext, вы можете столкнуться с этой ошибкой.

Я был уверен, что я был настроить конструктор без параметров, и я был в состоянии увидеть контекст с помощью следующей команды CLI:

dotnet ef database dbContext list 

Единственный способ для выполнения миграции в том, чтобы реализовать интерфейс IDbContextFactory<TContext> в проект. Документация и примеры о том, как это сделать, основаны на VS 2015. В VS 2017 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 будет официально выпущен 7 марта 2017 года. Однако мои вопросы таковы: что объявляет '1.0.0-msbuild3-final' для инструмента Microsoft.EntityFrameworkCore.Tools.DotNet'? Означает ли это, что нет инструмента 1.1.0, если вы используете msbuild? (Я все еще на VS2015) –