我开始精益学习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
编辑3
以下建议似乎又引起了另一个错误。所以我在json工具中添加了nuget,但仍然出现此错误。
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
答案 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)