如何使用新的csproj文件修復“沒有找到匹配命令的可執行文件”dotnet-ef“”

.net-core asp.net-core entity-framework-core

我想將SQLite與Entity Framework Core一起使用。我正在關注這個官方教程:

.NET核心 - 新數據庫

它說要像這樣修改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 Core現在使用csproj文件而不是project.json。

我將我的csproj修改為Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version= "1.1.0-preview4-final"但是當我嘗試命令dotnet ef migrations add MyFirstMigration我收到以下錯誤:

“找不到匹配命令的可執行文件”dotnet-ef“”

我怎樣才能用新的csproj解決這個問題?

一般承認的答案

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'的實現。

根據文檔,這是因為設計時工具嘗試自動查找應用程序如何創建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);        
    }
}


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow