【问题标题】:System.IO.FileNotFoundException when creating EF migrations on .net core在 .net 核心上创建 EF 迁移时出现 System.IO.FileNotFoundException
【发布时间】:2020-02-15 22:32:56
【问题描述】:

我有一个 .NET Core 2.2 项目,正在尝试设置 EF 迁移。

运行时:

dotnet ef 迁移添加 init --verbose

我收到以下错误:

为提供者寻找设计时服务 'Microsoft.EntityFrameworkCore.SqlServer'... 使用设计时 来自提供者“Microsoft.EntityFrameworkCore.SqlServer”的服务。 查找程序集“myproject-api”引用的设计时服务。不 找到了引用的设计时服务。发现 程序集“myproject-api”中的 IDesignTimeServices 实现...否 找到了设计时服务。 System.IO.FileNotFoundException: 无法加载文件或程序集 'myproject, Culture=neutral, PublicKeyToken=null'。系统找不到指定的文件。

这是我的 csproj 文件:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.4" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.2.4" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.4" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.4" />
  </ItemGroup>

</Project>

编辑,这是我的 Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
          WebHost.CreateDefaultBuilder(args)
            .UseKestrel()
            .UseUrls("http://localhost:5004")
            .UseStartup<Startup>();

}

【问题讨论】:

  • 您能构建您的项目或解决方案吗?
  • 您如何设置您的应用程序以使用 dbcontext?我个人只使用过两个命令:使用 nuget 包管理器:“add-migration”和“update-database”
  • 是的,我可以构建我的项目@BijayYadav
  • 我之前没有为这个项目使用迁移@JohanHerstad,我一直在手动进行数据库更新
  • 为了更好地了解您的项目设置,您能否发布您的数据库上下文定义以及启动文件。一开始尝试在迁移命令中指定您的数据库上下文:dotnet ef migrations add init --context &lt;dbcontextfile&gt;

标签: c# .net-core entity-framework-core


【解决方案1】:

EF Core 的设计时间分辨率在很大程度上依赖于命名约定以及将您的配置放在正确的位置。不过,您的 Program 课程看起来不错。

您能否检查您的 Startup 类是否与此类似,并且在 ConfigureServices 方法中具有所需的 AddDbContext 调用?

public class Startup
{
    public IConfiguration Configuration { get; }

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
    }
}

【讨论】:

    【解决方案2】:

    试试;

    将上下文名称添加到选项构造函数。

     public MyDbContext(DbContextOptions<**MyDbContext**> options)
          : base(options)
        {
        }
    

    迁移命令。

    添加迁移 MyMig -Context MyDbContext

    如果“myproject-api”层没有安装“Microsoft.EntityFrameworkCore.SqlServer”包,则安装它。

    【讨论】:

      【解决方案3】:

      你需要开始配置数据库上下文

      public class MyDbContext : DbContext
      {
          public DbSet<MyEntity> Entities { get; set; }
      
          public MyDbContext (DbContextOptions<MyDbContext> options) : base(options) { }
      
          protected override void OnModelCreating(ModelBuilder modelBuilder)
          {
              // Apply configurations
          }
      }
      

      并在 Startup.cs 中配置 sqlserver:

      public void ConfigureServices(IServiceCollection services)
      {
          services.AddDbContext<MyDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
      }
      

      正如我在 cmets 中已经提到的,您需要运行迁移并指定上下文:

      $ dotnet ef migrations add init --context MyDbContext
      

      可选的也可以定义启动项目--startup-project和输出目录--output-dir

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-30
        • 1970-01-01
        • 1970-01-01
        • 2021-06-14
        • 2018-05-15
        • 1970-01-01
        • 2023-04-02
        • 2017-11-29
        相关资源
        最近更新 更多