如何在 ASP.NET Core 8 中创建具有多个项目架构的迁移

问题描述 投票:0回答:1

我在 ASP.NET Core 8 中创建了两个项目:

1. Web API 项目包含

  • appsettings.json
  • 中的连接字符串
  • DbContext
    注册以及
    Program.cs
    文件中的连接字符串

2. 类库项目包含:

  • 型号
  • Context,在Web API项目的program.cs文件中注册
  • 所有 Entity Framework Core 包 - 工具、设计、SqlServer

我已在startupConfiguration中将这两个项目设置为启动。 Web API 项目有对类库项目的引用。

我正在类库项目中运行

add-migration mgnName
命令。

我收到错误:

无法创建类型为“”的“DbContext”。异常“找不到配置文件‘appsettings.json’并且不是可选的”。预期的物理路径是 'K:.NET CORe\FinalWebProject\FinalWebProject.Data ppsettings.json'。'尝试创建实例时抛出。有关设计时支持的不同模式,请参阅 https://go.microsoft.com/fwlink/?linkid=851728

我还完成了设计时数据库创建,但错误不会消失。

如果有人可以的话请帮助我!

entity-framework-core ef-code-first entity-framework-migrations asp.net-core-8
1个回答
0
投票

我没有在我这边重现你的问题。请比较你的代码和我的代码并尝试一下。

首先,我在VS中创建了一个新的.net 8 Web api项目,就像你提到的那样。我在 appsettings.json 中添加了连接字符串。

"ConnectionStrings": {
  "DefaultConnection": "xx"
},

并在Program.cs中添加了DbContext注册

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));

您在问题中没有提到的是有关 nuget 软件包的内容。这是我在 Web api 项目中添加的内容。

<ItemGroup>
  <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.8" />
  <PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
 <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.8">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
 </PackageReference>
</ItemGroup>

然后我创建了 ClassLibrary 项目。在这个项目中,我创建了 Data 文件夹和 Models 文件夹。我的

ApplicationDbContext
如下所示。

namespace ClassLibrary1.Data
{
    public class ApplicationDbContext : IdentityDbContext
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }

        public DbSet<MovieRelease> MovieRel { get; set; }

    }
}

这是我的模特

namespace ClassLibrary1.Models
{
    public class MovieRelease
    {
        [Key]
        public int ReleaseId { get; set; }
        public int ReleaseName { get; set; }
    }
}

并且它需要 nuget 包:

<ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.8" />
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.8" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.8" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.8">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
  </ItemGroup>

这是我的项目结构和我的测试结果。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.