![](/img/trans.png)
[英]Entity Framework Core: No parameterless constructor defined for this dbcontext
[英]Entity Framework core: Cannot add migrations: No parameterless constructor
我的數據項目參考:(實體框架核心)
<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>
數據庫上下文:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{ ....
}
}
public class ApplicationUser : IdentityUser
{
}
每次我嘗試命令
dotnet ef migrations添加Init --verbose
,我收到了錯誤。 在將Data項目與主項目分開之前,它已經習慣了。
Microsoft.EntityFrameworkCore.Design.OperationException:在“ApplicationDbContext”上找不到無參數構造函數。 將無參數構造添加到'ApplicationDbContext'或在與'ApplicationDbContext'相同的程序集中添加'IDbContextFactory'的實現。 ---> System.Mi ssingMethodException:沒有為此對象定義無參數構造函數。 在System.RuntimeTypeHandle.CreateInstance(RuntimeType類型,Boolean publicOn ly,Boolean noCheck,Boolean&canBeCached,RuntimeMethodHandleInternal&ctor,Bo olean&bNeedSecurityCheck)
我有同樣的問題。 我已經得到了正常遷移的項目。 從某種程度上說它開始給我這個錯誤。 問題出在啟動項目選擇中。 選擇項目作為啟動,在其中配置要用作服務的實體框架。
這與錯誤說的完全一樣。 您需要在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。
無論它值多少,我在ASP.Net Core 2.1 / EF中遇到此錯誤,因為我的“appsettings.json”中存在語法錯誤:
不好的選擇:
{ "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
完美運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.