在.NET Core 2.0下添加实体框架迁移期间出现“参数计数不匹配”错误

时间:2017-12-07 09:52:37

标签: asp.net-core entity-framework-core ef-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 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");

请指教。在Core 1.0上,迁移工作正常。我实现了一个IDesignTimeDbContextFactory,我的DBContext类有一个无参数构造函数,所以它不是原因。

2 个答案:

答案 0 :(得分:6)

我的解决方案是将Array传递给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());
}

答案 1 :(得分:2)

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

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

        builder.Entity<T>().HasData(...);
    }

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