尝试通过共享和迁移共享数据库上下文时发生错误

时间:2019-08-29 22:29:22

标签: c# asp.net-core

我开始精益学习asp.net core 3,目前遇到问题。我试图像以前那样通过.net核心dll共享我的数据库上下文,但是出现错误。

我在课堂上宣布了以下内容。

// This method gets called by the runtime. Use this method to add services to e container.
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
    services.AddDbContext<DbContext_Model>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("AppliedContext")));
}

我的核心dll项目解决方案中的数据库上下文。

public class DbContext_Model: DbContext
{
    public DbContext_Model(DbContextOptions<DbContext_Model> options)
      : base(options)
    { }

    public DbSet<Customer> Customer { get; set; }
    public DbSet<Policys> Policys { get; set; }

}

我已经在下面声明了我的连接字符串,并屏蔽了密码

  

“ ConnectionStrings”:{       “ AppliedContext”:“服务器= DESKTOP \ MSSQLSERVER2017;数据库=系统;用户   Id = sa; Password = xxxxx; MultipleActiveResultSets = true“

但是当我执行Add-Migration InitalCreate时,会出现此错误。

  

无法创建类型为'DbContext_Model'的对象。为了   设计时支持的不同模式,请参阅   https://go.microsoft.com/fwlink/?linkid=851728

.net核心库和网站之间是否不再允许共享上下文?

  

编辑2

请查看显示我选择了正确项目的屏幕截图。 enter image description here

  

编辑3

以下建议似乎又引起了另一个错误。所以我在json工具中添加了nuget,但仍然出现此错误。

enter image description here

  

dotnet ef迁移会添加InitialCreate System.MissingMethodException:   找不到方法:'System.Text.Json.JsonDocument   System.Text.Json.JsonDocument.Parse(System.IO.Stream,   System.Text.Json.JsonReaderOptions)”。在   Microsoft.EntityFrameworkCore.Tools.RootCommand.Execute()位于   Microsoft.EntityFrameworkCore.Tools.Commands.CommandBase。<> c__DisplayClass0_0.b__0()   在   Microsoft.DotNet.Cli.CommandLine.CommandLineApplication.Execute(String []   args),位于Microsoft.EntityFrameworkCore.Tools.Program.Main(String []   args)找不到方法:'System.Text.Json.JsonDocument   System.Text.Json.JsonDocument.Parse(System.IO.Stream,   System.Text.Json.JsonReaderOptions)”。 PM> dotnet ef迁移添加   InitialCreate

3 个答案:

答案 0 :(得分:0)

尝试这样的事情:

options.UseSqlServer(
    Configuration.GetConnectionString("AppliedContext"),
    options => options.MigrationsAssembly(<DB_PROJECT>)

然后,您应该可以在具有DbContext项目的文件夹中运行此文件:

dotnet ef migrations add <NAME> --startup-project <STARTUP_PROJECT>

答案 1 :(得分:0)

Edit3 中的屏幕截图中,您需要将与EF Core相关的软件包更新为3.0版。在管理NutGet软件包中,选中搜索框旁边的包括预发行版,然后将其更新为如下所示的最新版本:

<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
  <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.0.0-preview8.19405.11" />
  <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.0.0-preview8.19405.11">
    <PrivateAssets>all</PrivateAssets>
    <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
  </PackageReference>
  <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0-preview8.19405.11" />
  <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0-preview8.19405.11">
    <PrivateAssets>all</PrivateAssets>
    <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
  </PackageReference>
</ItemGroup>

</Project>

注意:添加迁移时,请将您的Web应用程序设置为“启动”项目,并将类库设置为您希望“迁移”文件夹生成的默认项目。

参考:https://dotnetthoughts.net/using-ef-core-in-a-separate-class-library/

答案 2 :(得分:0)

Edit3 的屏幕截图似乎表明您的EF工具版本已过时。您可以通过执行以下操作进行检查:

dotnet ef --version

在命令行上。如果不是preview8,请安装它:

dotnet tool update dotnet-ef --version 3.0.0-preview8.19405.11

((可选使用--global开关)。

当心:与issue一起使用时,EF Preview8还有一个HasData。它应该在Preview9中修复(在撰写本文时尚未发布)。