c# – Entity Framework核心:无法添加迁移:无参数构造函数
我的数据项目参考:(实体框架核心)
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp1.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="1.1.1" /> <ProjectReference Include="..Butv.CoreButv.Core.csproj" /> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.0.3" /> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.1" PrivateAssets="All" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.0.0" /> </ItemGroup> <ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" /> </ItemGroup> <ItemGroup> <Folder Include="Migrations" /> </ItemGroup> </Project> 数据库上下文: public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { .... } } public class ApplicationUser : IdentityUser { } 每次我尝试命令
,我收到了错误.在将Data项目与主项目分开之前,它已经习惯了.
解决方法
这与错误说的完全一样.您需要在DbContext类(您基本上不能这样做)上使用无参数构造函数,或者实现IDbContextFactory.
我使用的方法是创建IDbContextFactory的实现并从Create方法返回我的DbContext的实例,如下所示: public class ApplicationDbContext : DbContext<ApplicationDbContext> { // DbContext code as normal } public class ApplicationDbContextFactory : IDbContextFactory<ApplicationDbContext> { public ApplicationDbContext Create(DbContextFactoryOptions options) { var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>(); return new ApplicationDbContext(optionsBuilder.Options); } } 请注意,您必须创建一个DbContextOptionsBuilder以传递给DbContext,但是由于迁移实际上并未访问数据库而只是读取您的实体类,我认为您不需要实际配置任何选项,除了可能的数据库提供程序,因为我已经遇到了生成的迁移代码问题,这些代码适用于一个提供商而不是另一个提供商 现在,当您运行迁移时,EF应自动查找Factory类并使用它来创建新的DbContext. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |