我的数据项目参考:(实体框架核心)
<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.Core\Butv.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>
db Context:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{ ....
}
}
public class ApplicationUser : IdentityUser
{
}
每次我尝试命令
dotnet ef迁移添加Init --verbose
,我收到错误。在将Data项目与主项目分开之前,它已经习惯了。
Microsoft.EntityFrameworkCore.Design.OperationException:无无参数构造 uctor在'ApplicationDbContext'上找到。添加无参数构造 转到'ApplicationDbContext'或在'ApplicationDbContext'的同一程序集中添加'IDbContextFactory'的实现。 ---&GT; System.Mi ssingMethodException:没有为此对象定义的无参数构造函数。 在System.RuntimeTypeHandle.CreateInstance(RuntimeType类型,布尔值publicOn ly,Boolean noCheck,Boolean&amp; canBeCached,RuntimeMethodHandleInternal&amp; ctor,Bo 奥利安和放大器; bNeedSecurityCheck)
答案 0 :(得分:11)
我遇到了同样的问题。我已经得到了正常迁移的项目。从某种程度上说它开始给我这个错误。问题出在启动项目选择中。选择项目作为启动,在其中配置实体框架以用作服务。
答案 1 :(得分:2)
这与错误说的完全一样。您需要在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。
答案 2 :(得分:0)
无论如何,由于“ appsettings.json”中的语法错误,我在ASP.Net Core 2.1 / EF中遇到此错误:
不良设置:
{
"ConnectionStrings": {
"DefaultConnection": "\"Server=(LocalDb)\\\\MSSQLLocalDB;Database=demoangulardatabase;",
"Trusted_Connection=True;MultipleActiveResultSets=true\""
},
...
“迁移”命令失败:
dotnet ef migrations add initialMigration -c ApplicationDbContext -v
...
Microsoft.EntityFrameworkCore.Design.OperationException: Unable to create an object of type 'ApplicationDbContext'.
Add an implementation of 'IDesignTimeDbContextFactory<ApplicationDbContext>' to the project, or see https://go.microsoft.com/fwlink/?linkid=851728 for additional patterns supported at design time. --->
System.MissingMethodException: No parameterless constructor defined for this object.
...
更正了appsettings.json:
"ConnectionStrings": {
"DefaultConnection":
"Server=(LocalDb)\\MSSQLLocalDB;Database=demoangulardatabase;Trusted_Connection=True;MultipleActiveResultSets=true"
},
修复损坏的appsettings.json后,dotnet ef migrations add initialMigration -c ApplicationDbContext -v
完美运行。