簡體   English   中英

實體框架核心:無法添加遷移:無參數構造函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM