在 .NET Core 2.0 下添加实体框架迁移时出现"Parameter count mismatch"错误



在将项目迁移到.NET Core 2.0,Visual Studio 15.5和.NET Core SDK 2.1.2之后,我尝试使用EF添加迁移时会出现错误核心。

C:ProjectsSQLwalletSQLwallet>dotnet ef migrations add IdentityServer.
An error occurred while calling method 'BuildWebHost' on class 'Program'.
Continuing without the application service provider. Error: Parameter count mismatch.

Done. To undo this action, use 'ef migrations remove'

因此,创建了一个空迁移类,使用empty向上()和down()方法。

program.cs看起来像:

public class Program
{
    public static IWebHost BuildWebHost(string[] args, string environmentName)
    {...}
    public static void Main(string[] args)
    {

        IWebHost host;
        host = BuildWebHost(args, "Development");

请建议。在核心1.0上,迁移效果很好。我已经实现了一个IDesigntimedBcontextFactory,并且我的dbcontext类具有无参数构造函数,因此它不可能是原因。

我的解决方案是将数组传递到HasData函数,而不是通用List。如果使用列表,请尝试使用ToArray函数转换数组。

这是一个示例:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
      var users = new List<User>();
      var user1 = new User() { Id = 1, Username = "user_1" };
      var user2 = new User() { Id = 2, Username = "user_2" };
      users = new List<User>() { user1, user2 };
      modelBuilder.Entity<User>().HasData(users.ToArray());
}

查看dbContext中的onmodeLcreating方法。确保调用base.OnModelCreating(builder)。它应该看起来像:

protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);            
        builder.Entity<T>().HasData(...);
    }

如果您使用builder.Entity<T>().HasData(...)来播种数据,请确保将其传递给[],而不是IEnumerable。

相关内容

最新更新