Entity framework core 脚手架DbContext在尝试复数化时返回System.ArgumentNullException:参数名称:EFCore 2.0中的ProposeIdentifier

Entity framework core 脚手架DbContext在尝试复数化时返回System.ArgumentNullException:参数名称:EFCore 2.0中的ProposeIdentifier,entity-framework-core,scaffolding,Entity Framework Core,Scaffolding,当我运行命令时,Scaffold DbContext“Server=localhost;Database=MyDatabase;integratedsecurity=true”Microsoft.EntityFrameworkCore.SqlServer 我得到一个错误: System.ArgumentNullException: Value cannot be null. Parameter name: proposedIdentifier at Microsoft.EntityFram

当我运行命令时,Scaffold DbContext“Server=localhost;Database=MyDatabase;integratedsecurity=true”Microsoft.EntityFrameworkCore.SqlServer

我得到一个错误:

System.ArgumentNullException: Value cannot be null.
Parameter name: proposedIdentifier
   at Microsoft.EntityFrameworkCore.Utilities.Check.NotEmpty(String value, String parameterName)
   at Microsoft.EntityFrameworkCore.Scaffolding.Internal.CSharpUtilities.Uniquifier(String proposedIdentifier, ICollection`1 existingIdentifiers)
   at Microsoft.EntityFrameworkCore.Scaffolding.Internal.CSharpUtilities.GenerateCSharpIdentifier(String identifier, ICollection`1 existingIdentifiers, Func`2 singularizePluralizer, Func`3 uniquifier)
   at Microsoft.EntityFrameworkCore.Scaffolding.Internal.CSharpUtilities.GenerateCSharpIdentifier(String identifier, ICollection`1 existingIdentifiers, Func`2 singularizePluralizer)
   at Microsoft.EntityFrameworkCore.Scaffolding.Internal.CSharpNamer`1.GetName(T item)
   at Microsoft.EntityFrameworkCore.Scaffolding.Internal.CSharpUniqueNamer`1.GetName(T item)
   at Microsoft.EntityFrameworkCore.Scaffolding.Internal.RelationalScaffoldingModelFactory.GetEntityTypeName(DatabaseTable table)
   at Microsoft.EntityFrameworkCore.Scaffolding.Internal.RelationalScaffoldingModelFactory.VisitTable(ModelBuilder modelBuilder, DatabaseTable table)
   at Microsoft.EntityFrameworkCore.Scaffolding.Internal.RelationalScaffoldingModelFactory.VisitTables(ModelBuilder modelBuilder, ICollection`1 tables)
   at Microsoft.EntityFrameworkCore.Scaffolding.Internal.RelationalScaffoldingModelFactory.VisitDatabaseModel(ModelBuilder modelBuilder, DatabaseModel databaseModel)
   at Microsoft.EntityFrameworkCore.Scaffolding.Internal.RelationalScaffoldingModelFactory.CreateFromDatabaseModel(DatabaseModel databaseModel, Boolean useDatabaseNames)
   at Microsoft.EntityFrameworkCore.Scaffolding.Internal.RelationalScaffoldingModelFactory.Create(String connectionString, IEnumerable`1 tables, IEnumerable`1 schemas, Boolean useDatabaseNames)
   at Microsoft.EntityFrameworkCore.Scaffolding.Internal.ModelScaffolder.Generate(String connectionString, IEnumerable`1 tables, IEnumerable`1 schemas, String projectPath, String outputPath, String rootNamespace, String contextName, Boolean useDataAnnotations, Boolean overwriteFiles, Boolean useDatabaseNames)
   at Microsoft.EntityFrameworkCore.Design.Internal.DatabaseOperations.ScaffoldContext(String provider, String connectionString, String outputDir, String dbContextClassName, IEnumerable`1 schemas, IEnumerable`1 tables, Boolean useDataAnnotations, Boolean overwriteFiles, Boolean useDatabaseNames)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScaffoldContextImpl(String provider, String connectionString, String outputDir, String dbContextClassName, IEnumerable`1 schemaFilters, IEnumerable`1 tableFilters, Boolean useDataAnnotations, Boolean overwriteFiles, Boolean useDatabaseNames)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScaffoldContext.<>c__DisplayClass0_1.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.<Execute>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
Value cannot be null.
Parameter name: proposedIdentifier.
System.ArgumentNullException:值不能为null。
参数名称:ProposeIdentifier
位于Microsoft.EntityFrameworkCore.Utilities.Check.NotEmpty(字符串值,字符串参数名称)
位于Microsoft.EntityFrameworkCore.Scaffolding.Internal.CSharpUtilities.Uniquifier(字符串ProposeIdentifier,ICollection`1现有标识符)
位于Microsoft.EntityFrameworkCore.Scaffolding.Internal.CSharpUtilities.GenerateCSharpIdentifier(字符串标识符、ICollection`1现有标识符、Func`2 SingularizePlluralizer、Func`3 uniquifier)
位于Microsoft.EntityFrameworkCore.Scaffolding.Internal.CSharpUtilities.GenerateCSharpIdentifier(字符串标识符,ICollection`1现有标识符,Func`2 SingularizePlluralizer)
位于Microsoft.EntityFrameworkCore.Scaffolding.Internal.CSharpNamer`1.GetName(T项)
位于Microsoft.EntityFrameworkCore.Scaffolding.Internal.CSharpUniqueNamer`1.GetName(T项)
位于Microsoft.EntityFrameworkCore.Scaffolding.Internal.RelationalScaffoldingModelFactory.GetEntityTypeName(数据库表)
位于Microsoft.EntityFrameworkCore.Scaffolding.Internal.RelationalScaffoldingModelFactory.VisitTable(ModelBuilder ModelBuilder,DatabaseTable表)
位于Microsoft.EntityFrameworkCore.Scaffolding.Internal.RelationalScaffoldingModelFactory.VisitTables(ModelBuilder ModelBuilder,ICollection`1表)
位于Microsoft.EntityFrameworkCore.Scaffolding.Internal.RelationalScaffoldingModelFactory.VisitDatabaseModel(ModelBuilder ModelBuilder,DatabaseModel DatabaseModel DatabaseModel)
位于Microsoft.EntityFrameworkCore.Scaffolding.Internal.RelationalScaffoldingModelFactory.CreateFromDatabaseModel(DatabaseModel DatabaseModel,布尔useDatabaseNames)
位于Microsoft.EntityFrameworkCore.Scaffolding.Internal.RelationalScaffoldingModelFactory.Create(字符串连接字符串、IEnumerable`1表、IEnumerable`1模式、布尔useDatabaseNames)
位于Microsoft.EntityFrameworkCore.Scaffolding.Internal.ModelScaffolder.Generate(字符串连接字符串、IEnumerable`1表、IEnumerable`1架构、字符串项目路径、字符串输出路径、字符串根命名空间、字符串contextName、布尔useDataAnnotations、布尔重写文件、布尔useDatabaseNames)
位于Microsoft.EntityFrameworkCore.Design.Internal.DatabaseOperations.ScaffoldContext(字符串提供程序、字符串连接字符串、字符串输出目录、字符串dbContextClassName、IEnumerable`1模式、IEnumerable`1表、布尔useDataAnnotations、布尔UseOverwriteFile、布尔UseDatabaseName)
位于Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScaffoldContextImpl(字符串提供程序、字符串连接字符串、字符串输出目录、字符串dbContextClassName、IEnumerable`1 schemaFilters、IEnumerable`1表格过滤器、布尔useDataAnnotations、布尔重写文件、布尔useDatabaseNames)
在Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScaffoldContext.c__DisplayClass0_1.b_0()中
在Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.c__DisplayClass3_0`1.b__0()中
位于Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(操作)
值不能为null。
参数名称:ProposeIdentifier。
在我的启动项目中,我有:

public class CustomPluralizerDesignTimeServices : IDesignTimeServices
{
    public void ConfigureDesignTimeServices(IServiceCollection services)
    {
        services.AddSingleton<IPluralizer, HumanizerToIPluralizerAdapter>();
    }
}

public class HumanizerToIPluralizerAdapter : IPluralizer
{
    public string Pluralize(string name) => name.Pluralize();

    public string Singularize(string name) => name.Singularize();
}
公共类CustomPlularizerDesignTimeServices:IDesignTimeServices
{
public void配置DesignTimeServices(iSeries收集服务)
{
services.AddSingleton();
}
}
公共类HumanizerToIPluralizerAdapter:IPluralizer
{
公共字符串Pluralize(字符串名称)=>name.Pluralize();
公共字符串Singularize(字符串名称)=>name.Singularize();
}
当我删除此代码时,脚手架工作正常

依赖项:

  • 数据访问项目(.NET标准2.0)

    • Microsoft.EntityFrameworkCore.SqlServer 2.0
    • Microsoft.EntityFrameworkCore.Tools
    • Microsoft.VisualStudio.Web.CodeGeneration.Design
  • 启动项目(.NET CORE 2.0)

    • Microsoft.AspNetCore.All

    • 看起来像是您的
      IPluralizer
      实现中的一个bug。确保它没有为某些值返回null或空字符串。

      Microsoft.EntityFrameworkCore.SqlServer
      您不需要包含此项,除非您同时拥有
      EF 6
      EF CORE
      nuget软件包。如果两个都安装了,除非您绝对需要
      EF 6
      的原因,否则在我删除参数时,必须将其指定为package manager控制台中的用户输入。有关依赖项,请参见我的编辑