Asp.net core &引用;参数计数不匹配“;在.NET Core 2.0下添加实体框架迁移时出错

Asp.net core &引用;参数计数不匹配“;在.NET Core 2.0下添加实体框架迁移时出错,asp.net-core,entity-framework-core,entity-framework-migrations,asp.net-core-2.0,Asp.net Core,Entity Framework Core,Entity Framework Migrations,Asp.net Core 2.0,在将我的项目迁移到.NET Core 2.0、Visual Studio 15.5和.NET Core sdk 2.1.2的新安装之后,我在尝试使用EF Core添加迁移时出错 C:\Projects\SQLwallet\SQLwallet>dotnet ef migrations add IdentityServer. An error occurred while calling method 'BuildWebHost' on class 'Program'. Continuing

在将我的项目迁移到.NET Core 2.0、Visual Studio 15.5和.NET Core sdk 2.1.2的新安装之后,我在尝试使用EF Core添加迁移时出错

C:\Projects\SQLwallet\SQLwallet>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'
因此,将创建一个空迁移类,其中包含空的Up()和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");

请告知。迁移在Core1.0上运行良好。我实现了一个IDesignTimeDbContextFactory,我的DBContext类有一个无参数构造函数,所以这不是原因。

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

protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);            

        builder.Entity<T>().HasData(...);
    }
模型创建时受保护的覆盖无效(ModelBuilder)
{
基于模型创建(生成器);
builder.Entity().HasData(…);
}

如果您正在使用
builder.Entity().HasData(…)
为数据种子,请确保传递的是T[],而不是IEnumerable。

我的解决方案是将数组传递给
HasData
函数,而不是泛型
列表
。 如果使用列表,请尝试使用
函数将数组转换为数组

以下是一个例子:

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());
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
var users=新列表();
var user1=new User(){Id=1,Username=“User\u 1”};
var user2=new User(){Id=2,Username=“User_2”};
users=newlist(){user1,user2};
modelBuilder.Entity().HasData(users.ToArray());
}

您可以安全地忽略该消息。当问题得到解决时,它将消失。问题是迁移没有正确生成,它是空的。非常有用:“如果您使用builder.Entity().HasData(…)为您的数据设置种子,请确保您传递的是T[]而不是IEnumerable”它对我有效,谢谢。你知道为什么它不适用于通用列表吗?