gpt4 book ai didi

entity-framework - 在 .NETStandard 库项目中执行 EFcore 迁移

转载 作者:行者123 更新时间:2023-12-04 14:54:54 31 4
gpt4 key购买 nike

我的问题基本上是:是否可以在 .NET Standard 2.0 库项目中使用 Entity Framework Core(和迁移)? (不是核心项目)

我目前有2个项目:

  • ASP.NET 核心 主项目:我不想在这个项目中包含任何数据库或 EF,所以我添加了对 .NETstandard2.0 DAL 项目的引用
  • .NETStandard2.0 数据访问层项目:EF Core 带有用于访问数据库的数据库迁移项目。主项目使用这个项目从数据库中获取数据。

  • 对于 .NETStandard DAL 项目,我使用以下设置和类: .csproj文件包含 EF 和迁移的依赖项:
    <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="2.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.0" />
    </ItemGroup>

    <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
    </ItemGroup>

    调用后 dotnet restore , 我创建了一个 DbContext后裔:
    class MyTestContext: DbContext
    {
    public MyTestContext(DbContextOptions<MyTestContext> options) : base(options)
    {
    }

    public DbSet<Class1> Class1Table { get; set; }
    }

    并添加了 DbContextFactoryIDesignTimeDbContextFactory喜欢:
    class DbContextFactory : IDesignTimeDbContextFactory<MyTestContext>
    {
    public MyTestContext CreateDbContext(string[] args)
    {
    var builder = new DbContextOptionsBuilder<MyTestContext>();
    builder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=efmigrations2017;Trusted_Connection=True;MultipleActiveResultSets=true",
    optionsBuilder => optionsBuilder.MigrationsAssembly(typeof(MyTestContext).GetTypeInfo().Assembly.GetName().Name));

    return new MyTestContext(builder.Options);
    }
    }

    好的,到目前为止一切正常,.NETStandard 项目构建成功。

    现在我想通过执行来创建我的第一个迁移:
    dotnet ef migrations add InitialCreate

    这会引发错误:
    enter image description here

    如果我正确理解错误消息,EF Core 只能用于 .NET Core 和 .NET Framework 项目,不能用于 .NETStandard 项目?

    如果这是真的,我如何将 EF 数据库逻辑与其他应用程序分开?

    如果没有,我怎样才能让迁移工作?

    先感谢您

    最佳答案

    你有两个选择。

    一:使用您的 ASP.NET Core 项目作为启动项目。

    dotnet ef migrations add InitialCreate --startup-project ..\MyWebApplication

    二:在您的类库中跨目标 .NET Core。 (编辑 *.csproj )

    <PropertyGroup>
    <!-- Note: This property name becomes plural. -->
    <TargetFrameworks>netcoreapp2.0;netstandard2.0</TargetFrameworks>
    </PropertyGroup>

    关于entity-framework - 在 .NETStandard 库项目中执行 EFcore 迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47019864/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com