entity-framework-core - 尝试复数时,Scaffold-DbContext 返回 System.ArgumentNullException : Parameter name: proposedIdentifier in EFCore 2. 0

标签 entity-framework-core scaffolding

当我运行命令 Scaffold-DbContext "Server=localhost;Database=MyDatabase;Integrated Security=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.

在我的启动项目中,我有:

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();
}

当我删除此代码时,脚手架就可以工作。

依赖关系:

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

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

    • Microsoft.AspNetCore.All

最佳答案

看起来像是您的 IPluralizer 实现中的错误。确保某些值不会返回 null 或空字符串。

关于entity-framework-core - 尝试复数时,Scaffold-DbContext 返回 System.ArgumentNullException : Parameter name: proposedIdentifier in EFCore 2. 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46176578/

相关文章:

grails - grails 3.0.1支架 View 不显示域关系

c# - SingleOrDefault 和 FirstOrDefault 返回缓存数据

c# - 由于我使用的是 mac,所以我在 azure data studio 中在哪里可以找到连接字符串,并且我将需要它

css - 如何在折叠时将 2 列 css 网格的左列内的元素移动到主要内容区域的上方和下方

c# - EF Core 6 启动项目在尝试搭建非启动项目的项目时不引用 EFCore.Design

c# - Entity Framework 5 MVC 4 - 脚手架错误 - 无键

c# - 健壮的计费系统设计。我是不是完全走错了方向?

c# - EF.Core查询相关数据

entity-framework-core - 我无法运行迁移(使用 .net core 3.0 和 Entity Framework )

c# - Entity Framework Core - 不使用主键的两个表之间的关系